Eigen中的点积乘以转置?

时间:2015-11-13 22:27:50

标签: c++ eigen

我似乎无法让它发挥作用,是吗?

e.g:

    Vector3d a;
    Vector3d b;
    ...
    double c = a.transpose() * b;  // Doesn't work
    double c = a.dot(b);  // Seems to work

我来自MATLAB,其中有一个' * b。如果需要,我可以处理使用点,但我想知道我是否只是做了一些愚蠢的事情。

1 个答案:

答案 0 :(得分:2)

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

Eigena.transpose() * b有效,它不会返回double,而是返回1x1矩阵。如果您将其写为MatrixXd c = a.transpose() * b;double c = (a.transpose() * b)[0];,则应按预期工作。

使用Eigen 3.0.0或更高版本,@ggael当然是正确的。这个答案考虑了在编译时不知道ab的维度的一般情况。在使用Vector3dVectorXd的情况下,double c = a.transpose() * b;也适用,而不是问题中所述。对于版本< = 2.0.15,原件是正确的,没有任何保留。