Eigen 中的点积乘以转置?

Dot product in Eigen by multiplying by transpose?

我似乎无法让它工作,应该吗?

例如:

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

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

在matlab中,a'*b是dot(a, b)的语法糖。请注意,向量的要求是 "they must have the same length" 而不是一个是行向量,一个是列。这和Eigen的a.dot(b).

是一样的

Eigena.transpose() * b 中,它只是不 return 一个 double 而是一个 1x1 矩阵。如果你把它写成 MatrixXd c = a.transpose() * b;double c = (a.transpose() * b)[0]; 它应该能按预期工作。

上一段是 Eigen 2 中的情况(显然 OP 正在使用)。既然如此(Eigen 3),当然是对的。该答案考虑了一般情况,其中 ab 的维度在编译时未知。在使用 Vector3dVectorXd 的情况下, double c = a.transpose() * b; 也可以工作,而不是问题中所述。版本 <= 2.0.15,原文正确无保留。