如何在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
相关产品推荐
相关产品推荐

