Eigen中三维矩阵按最后维度求和的colwise()等效方法
解决Eigen三维张量沿指定维度求和的问题
首先要纠正一个关键细节:你代码里的Eigen::MatrixXd是二维矩阵类型,Eigen不支持用它直接创建三维结构,正确的三维张量应该用Eigen::Tensor<double, 3>来定义:
Eigen::Tensor<double, 3> mat(5, 10, 20);
针对沿最后一个维度求和得到5×10二维张量的需求,有两种高效实现方式,完全不需要手动遍历元素:
1. 使用Tensor的sum()方法指定求和维度
Eigen的Tensor模块提供了直接按维度求和的接口,三维张量的维度索引从0开始,最后一个维度对应索引2,直接传入该索引即可完成缩减:
// 沿最后一个维度(索引2)求和,得到5×10的二维张量 Eigen::Tensor<double, 2> result = mat.sum(2);
2. 用dimensionwise()模拟二维的colwise()/rowwise()风格
如果你习惯二维矩阵的链式调用写法,Tensor模块的dimensionwise()方法可以针对指定维度执行归约操作,效果类似colwise():
Eigen::Tensor<double, 2> result = mat.dimensionwise(Eigen::internal::SumReducer<double>(), 2);
需要注意,使用Tensor模块需要包含对应头文件,编译时确保链接Eigen的Tensor组件:
#include <Eigen/Tensor>
内容的提问来源于stack exchange,提问作者sodiumnitrate
相关产品推荐
相关产品推荐

