You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:05