如何用NumPy向量化方法获取分割后子数组的最大值?
用NumPy向量化方式实现分割数组后取各子数组最大值
当然可以用纯NumPy向量化方式实现,无需预先分割数组,核心是使用np.maximum.reduceat函数——它专门用于对数组的指定区间执行聚合操作,完美适配这个场景,而且效率远高于Python循环。
实现代码
import numpy as np arr = np.arange(12) ind = np.array([3, 5, 9]) # 构造完整的区间起始索引:从数组开头0开始,拼接原分割点 reduce_indices = np.concatenate([[0], ind]) # 向量化计算各区间最大值 max_values = np.maximum.reduceat(arr, reduce_indices) print(max_values) # 输出: array([ 2, 4, 8, 11])
原理说明
np.maximum.reduceat的工作逻辑是:
- 以
reduce_indices中的每个索引为起点,依次计算当前索引到下一个索引前一位的元素最大值 - 最后一个索引对应的区间会直接计算到数组末尾
- 这正好和
np.split(arr, ind)分割出的子数组一一对应,无需生成中间子数组列表,完全规避了Python循环的额外开销。
内容的提问来源于stack exchange,提问作者user498029
相关产品推荐
相关产品推荐

