如何计算numpy数组axis 0方向最大最小值并对对应元素执行±5运算
import numpy as np # 初始化数组 array_a = [[38, 44, 13, 9, 10, 12, 6, 16, 1, 17, 2, 13, 8, 46, 7]] a = np.array(array_a).reshape(3,5) # 获取每列最大、最小值 min_a = a.min(axis=0) max_a = a.max(axis=0) # 对应位置修改数值 a[a == max_a] += 5 a[a == min_a] -= 5 # 输出结果 print(a)
运行后输出结果:
[[43 49 13 9 10] [12 1 21 -4 22] [-3 13 3 51 2]]
逻辑说明
- 不需要用
apply_along_axis,直接调用numpy数组的min/max方法指定axis=0即可直接得到每列的最小、最大值数组,运算效率更高 - 利用numpy的广播特性,直接将原数组和每列最大、最小值数组做逐元素比较,得到符合条件的位置掩码,直接对掩码对应位置做加减操作即可,不需要循环遍历
- 如果某列存在多个相同的最大/最小值,该写法也会同步对所有匹配位置做修改,符合通用场景需求
内容的提问来源于stack exchange,提问作者jennylui
相关产品推荐
相关产品推荐

