C++ 用转置乘以本征中的点积?

C++ 用转置乘以本征中的点积?,c++,eigen,C++,Eigen,我似乎不能让它工作,是吗 e、 g: 我来自MATLAB,其中a'*b是最重要的。如果需要,我可以使用dot,但我想知道我是否只是在做一些愚蠢的事情。在matlab中,a'*b是语法糖。请注意,对向量的要求是“它们必须具有相同的长度”,而不是一个是行向量,一个是列向量。这与Eigen的a.dot(b)相同 在,a.transpose()*b工作时,它只返回1x1矩阵而不是double。如果你把它写成MatrixXd c=a.transpose()*b或双c=(a.转置()*b)[0]它应该按预

我似乎不能让它工作,是吗

e、 g:


我来自MATLAB,其中a'*b是最重要的。如果需要,我可以使用dot,但我想知道我是否只是在做一些愚蠢的事情。

在matlab中,a'*b是语法糖。请注意,对向量的要求是“它们必须具有相同的长度”,而不是一个是行向量,一个是列向量。这与Eigen的
a.dot(b)
相同

在,
a.transpose()*b
工作时,它只返回1x1矩阵而不是
double
。如果你把它写成
MatrixXd c=a.transpose()*b
双c=(a.转置()*b)[0]它应该按预期工作


上述段落是在Eigen 2中的情况(显然OP正在使用)。从那时起(特征3),当然是正确的。这个答案考虑了编译时不知道
a
b
维度的一般情况。在使用
Vector3d
VectorXd
的情况下,则
double c=a.transpose()*b也可以工作,但与问题中所述的不同。有这么多版本。。。在matlab中,如果矩阵恰好是向量,那么矩阵乘法就没有关联性?这是相当棘手和危险的。不,AVI的注释只针对<代码> DOTE()/代码>函数,而不是针对运算符<代码> */Cord>。我猜我不会考虑一个**语法糖,因为它实际上是底层线性代数的直接翻译。在任何情况下,eigen返回1x1矩阵这一事实都是合理的,我可以得到值并将其转换为标量双精度。谢谢。在Eigen中,它相当于a.dot()*b,而不是dot(a,b)@Ari.stat谢谢,但这也不是正确的语法。正确的语法是
a.dot(b)
。无论如何,我纠正了答案中的语法。参见example.hm,您使用的是哪个版本的Eigen?以下方法确实有效:
double c=a.transpose()*b如果
a
b
在编译时确实是列向量,就像
Vector3d
VectorXd
一样。
    Vector3d a;
    Vector3d b;
    ...
    double c = a.transpose() * b;  // Doesn't work
    double c = a.dot(b);  // Seems to work