我似乎无法让它发挥作用,是吗?
e.g:
Vector3d a;
Vector3d b;
...
double c = a.transpose() * b; // Doesn't work
double c = a.dot(b); // Seems to work
我来自MATLAB,其中有一个' * b。如果需要,我可以处理使用点,但我想知道我是否只是做了一些愚蠢的事情。
答案 0 :(得分:2)
在matlab中,' * b是dot(a, b)
的语法糖。注意,对向量的要求是"它们必须具有相同的长度"而不是那个是行向量,而是一个列。这与Eigen的dot(a, b)
相同。
在Eigen,a.transpose() * b
有效,它不会返回double
,而是返回1x1矩阵。如果您将其写为MatrixXd c = a.transpose() * b;
或double c = (a.transpose() * b)[0];
,则应按预期工作。
使用Eigen 3.0.0或更高版本,@ggael当然是正确的。这个答案考虑了在编译时不知道a
和b
的维度的一般情况。在使用Vector3d
或VectorXd
的情况下,double c = a.transpose() * b;
也适用,而不是问题中所述。对于版本< = 2.0.15,原件是正确的,没有任何保留。