【问题标题】:c++ - How can Eigen do dynamic matrix and vector multiplication?c++ - Eigen 如何进行动态矩阵和向量乘法?
【发布时间】:2019-06-25 13:12:34
【问题描述】:

我在做动态矩阵和向量点积时遇到了麻烦,令人惊讶的是,我没有让它找到任何解决方案,因为 Eigen 是一个流行的库。

所以代码真的很简单:

int k = 3;
MatrixXd m;
m.resize(k, k);
ArrayXd a;
a.resize(k);
std::cout << "Dot product: " << m*a << std::endl;

我有错误

二进制表达式的无效操作数('MatrixXd'(又名'Matrix')和'ArrayXd'(又名'Array')) std::cout

我很困惑做动态矩阵和向量乘法是否可行。同时,我发现向量和矩阵都有.dot()的方法,那么点积用*还是.dot()呢?

【问题讨论】:

  • 存在矩阵向量乘积,但没有矩阵数组乘积。只需将a 的类型更改为VectorXd 即可使您的代码正常工作。
  • 我建议先阅读this,然后阅读this,以了解 Eigen 的基础知识。

标签: c++ eigen


【解决方案1】:

您需要有矩阵,而不是矩阵和数组的混合。您需要使用.matrix()a 转换为数组(这是一个视图,没有额外的计算成本)。

试试:

std::cout << "Dot product: " << m*a.matrix() << std::endl;

【讨论】:

  • 感谢您的快速回答!只想确认一下。所以Eigen 真的不支持直接矩阵向量乘法,但我可以使用.matrix().vector() 来实现这一点?
  • 可以,但是您没有向量类型(即VectorxfIIRC),而是一维数组。您也可以使用dot,但它应该在两个矩阵或两个数组之间,而不是数组和矩阵之间。
  • @MatthieuBrucher VectorXffloat 的向量,它与MatrixXd 不兼容(没有强制转换)。你需要在这里VectorXd
  • @chtz 哦,是的,当然是 Vectorxd,而不是 f。感谢您的评论!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多