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

如何用Eigen实现无循环的列操作求和生成矩阵?

问题:Eigen能否无循环实现矩阵列向量外积累加?

现有代码通过循环累加矩阵a的列向量与矩阵b对应列向量的转置乘积来生成矩阵m,请问是否可以使用Eigen实现无循环的等价操作?原代码如下:

Matrix3Xf a, b;
Matrix3f m;
m.setZero();
for (size_t i = 0; i < a.cols(); ++i) {
    m += a.col(i) * b.col(i).transpose();
}

回答

当然可以,你这段循环做的事情本质上就是矩阵乘法a * b.transpose()——矩阵乘法的定义就是把左矩阵的每一列和右矩阵的每一行(也就是原矩阵对应列的转置)做外积,然后累加所有结果。

直接用Eigen的矩阵乘法就能替代循环,代码更简洁,而且Eigen会自动做优化,效率也更高:

Matrix3Xf a, b;
Matrix3f m = a * b.transpose();

如果需要保留初始置零再累加的逻辑(比如m之前还有其他值),也可以写成:

m.setZero();
m += a * b.transpose();

内容的提问来源于stack exchange,提问作者atb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:22:01