我似乎无法让它工作,是吗?
例如:
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)
的语法糖.请注意,对 vector 的要求是“它们必须具有相同的长度”,而不是一个是行 vector ,一个是列。这与 Eigen 的 a.dot(b)
相同。
<罢工>
在 Eigen , a.transpose() * b
有效,它只是不返回 double
而是一个 1x1 矩阵。如果你把它写成 MatrixXd c = a.transpose() * b;
或 double c = (a.transpose() * b)[0];
它应该可以工作正如预期的那样。
上面的段落是 Eigen 2 中的情况(显然 OP 正在使用)。从那时起( Eigen 3),@ggael当然是对的。这个答案考虑了一个一般情况,其中 a
和 b
的维度在编译时是未知的。在使用 Vector3d
或 VectorXd
的情况下,double c = a.transpose() * b;
也可以正常工作,而不是像声明的那样在问题中。对于 <= 2.0.15 版本,原始版本是正确的,没有任何保留。
关于c++ - Eigen 中的点积乘以转置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702789/