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

如何在Eigen C++中实现向量外积?(对应Numpy outer功能)

解决Numpy outer 运算移植到Eigen库的问题

你混淆了Eigen的cross(叉乘)和Numpy的outer(外积):Eigen的cross仅针对3维向量做叉乘运算,而你需要的是向量外积(张量积),在Eigen中可以通过列向量乘以行向量来实现,这和Numpy里outer(a,b)等价于a.reshape(-1,1) @ b.reshape(1,-1)的逻辑完全一致。

正确的Eigen实现代码

#include <Eigen/Dense>
#define PI M_PI  // 或使用Eigen内置的EIGEN_PI(需额外包含<Eigen/Geometry>)

int main() {
    Eigen::VectorXf u = Eigen::VectorXf::LinSpaced(100, 0, 2*PI);
    Eigen::VectorXf v = Eigen::VectorXf::LinSpaced(100, 0, PI);
    
    // 列向量 × 行向量 = 外积矩阵,对应Numpy的outer操作
    Eigen::MatrixXf x = u.cos() * v.sin().transpose();
    Eigen::MatrixXf y = u.sin() * v.sin().transpose();
    Eigen::MatrixXf z = Eigen::VectorXf::Ones(u.size()) * v.cos().transpose();
    
    return 0;
}

关键说明

  • Eigen的VectorXf默认是列向量,调用transpose()可将其转换为行向量
  • 列向量与行向量的矩阵乘法结果,正好是两个向量的外积,输出矩阵维度为u.size() × v.size(),和Numpy的outer输出完全匹配
  • 该方法支持任意维度的向量,满足你处理大维度数据的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:15:29