如何获取Eigen张量的最大值?矩阵方法失效后的解决办法
Eigen张量获取最大值的解决方案
Eigen的Tensor模块与Matrix/Array模块API不兼容,无法直接使用maxCoeff()或array()方法,你可以通过以下几种方式实现类似MATLAB中max(max(max(tensor)))的全局最大值获取:
1. 获取全局标量最大值
方法一:使用reduce操作(推荐)
通过reduce结合MaxReducer直接计算整个张量的最大值:
#include <Eigen/Core> #include <Eigen/Tensor> // ... 你的初始化代码 ... double global_max = Test.reduce(Eigen::internal::MaxReducer<double>());
方法二:逐维度嵌套取最大值
模拟MATLAB的嵌套max调用,依次对每个维度取最大值,最终得到标量结果:
// 3D张量:先沿第0维取max得到2D,再沿第0维取max得到1D,最后取max得到标量 double global_max = Test.maximum(0).maximum(0).maximum();
2. 将3D张量全部赋值为最大值(匹配你的代码意图)
如果你的需求是把MaxTest这个3D张量的所有元素都设为Test的最大值,可以先获取标量最大值,再通过broadcast扩展维度:
Eigen::Tensor<double, 0> scalar_max = Test.reduce(Eigen::internal::MaxReducer<double>()); MaxTest = scalar_max.broadcast(Eigen::array<Eigen::Index, 3>{nx, ny, nz});
关键说明
- Tensor的
maximum(dim)方法会沿指定维度(从0开始计数)计算最大值,返回维度减1的张量;无参数的maximum()则对1D张量计算最大值。 reduce操作是Tensor模块中用于聚合计算(求和、最大、最小等)的通用方法,MaxReducer是内置的最大值聚合器。
内容的提问来源于stack exchange,提问作者Mathew77
相关产品推荐
相关产品推荐

