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)
.
是一样的
在 Eigen、a.transpose() * b
中,它只是不 return 一个 double
而是一个 1x1 矩阵。如果你把它写成 MatrixXd c = a.transpose() * b;
或 double c = (a.transpose() * b)[0];
它应该能按预期工作。
上一段是 Eigen 2 中的情况(显然 OP 正在使用)。既然如此(Eigen 3),当然是对的。该答案考虑了一般情况,其中 a
和 b
的维度在编译时未知。在使用 Vector3d
或 VectorXd
的情况下, double c = a.transpose() * b;
也可以工作,而不是问题中所述。版本 <= 2.0.15,原文正确无保留。
我似乎无法让它工作,应该吗?
例如:
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)
.
在 Eigen、a.transpose() * b
中,它只是不 return 一个 double
而是一个 1x1 矩阵。如果你把它写成 MatrixXd c = a.transpose() * b;
或 double c = (a.transpose() * b)[0];
它应该能按预期工作。
上一段是 Eigen 2 中的情况(显然 OP 正在使用)。既然如此(Eigen 3),a
和 b
的维度在编译时未知。在使用 Vector3d
或 VectorXd
的情况下, double c = a.transpose() * b;
也可以工作,而不是问题中所述。版本 <= 2.0.15,原文正确无保留。