如何使用Eigen计算M×N矩阵行与N×M矩阵对应列的内积向量
Eigen实现指定向量计算的方法
你要的输出向量的第i个元素,本质是矩阵A的第i行与矩阵B的第i列的点积,Eigen下有两种常用实现方式:
实现逻辑说明
- 方法1:逐对取行、列计算点积,适合大矩阵场景,不会产生多余计算开销
- 方法2:利用A与B的乘积矩阵的对角元直接生成结果,写法更简洁,适合小矩阵场景
- 如果你使用动态大小的矩阵,仅需将固定尺寸矩阵声明替换为
Eigen::MatrixXd A(2,3)、Eigen::MatrixXd B(3,2)即可,后续计算逻辑无需改动
完整代码示例
#include <iostream> #include <Eigen/Dense> int main() { // 初始化2行3列矩阵A Eigen::Matrix<double, 2, 3> A; A << 1, 2, 3, 4, 5, 6; // 初始化3行2列矩阵B Eigen::Matrix<double, 3, 2> B; B << 1, 7, 2, 8, 3, 9; // 方法1实现 Eigen::Vector2d res1; res1(0) = A.row(0).dot(B.col(0)); res1(1) = A.row(1).dot(B.col(1)); // 方法2实现 Eigen::Vector2d res2 = (A * B).diagonal(); // 输出验证 std::cout << "方法1计算结果:\n" << res1 << "\n\n"; std::cout << "方法2计算结果:\n" << res2 << std::endl; return 0; }
结果验证
上述示例中,计算得到的两个元素分别为:
- 第一个元素:
1*1 + 2*2 + 3*3 = 14 - 第二个元素:
4*7 + 5*8 + 6*9 = 122
两种方法输出结果完全一致。
内容的提问来源于stack exchange,提问作者arifle
相关产品推荐
相关产品推荐

