C++ 用转置乘以本征中的点积?
我似乎不能让它工作,是吗 e、 g: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]它应该按预
我来自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