c++ - Eigen 中的点积乘以转置?

标签 c++ eigen

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

例如:

    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当然是对的。这个答案考虑了一个一般情况,其中 ab 的维度在编译时是未知的。在使用 Vector3dVectorXd 的情况下,double c = a.transpose() * b; 也可以正常工作,而不是像声明的那样在问题中。对于 <= 2.0.15 版本,原始版本是正确的,没有任何保留。

关于c++ - Eigen 中的点积乘以转置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702789/

相关文章:

c++ - 抑制警告 C4996 : why not working?

c++ - 使用 Boost.Proto 构建 Eigen 表达式模板

c++ - 使用Eigen::FFT执行FFT时的频率

来自 txt 文件的 C++ 插入排序

C++ : correct way to calculate power for large no

c++ - 错误 C2248: 'std::future<Worldlet>::future':无法访问类 std::future<Worldlet> 中声明的私有(private)成员

c++ - 绕过 Eigen 静态断言

c++ - 即使将引用传递给函数, Eigen 原始缓冲区如何变化

c++ - cout 不产生输出

c++ - 简单的 Qt 应用程序无法在 OS X 上编译