
本文介绍使用 np.argmax(a, axis=0) 快速获取二维 NumPy 数组中每列最大元素对应行号的方法,并通过示例、原理说明和注意事项帮助读者准确掌握该操作。
本文介绍使用 np.argmax(a, axis=0) 快速获取二维 numpy 数组中每列最大元素对应行号的方法,并通过示例、原理说明和注意事项帮助读者准确掌握该操作。
在处理二维数组时,常需定位每列(或每行)极值的位置而非值本身。例如,给定数组:
import numpy as np
a = np.array([[2, 3, 1, 9],
[0, 5, 4, 7],
[2, 4, 6, 8]])其各列最大值为 [2, 5, 6, 9](即 np.amax(a, axis=0) 的结果),而它们所在行的索引分别为 [0, 1, 2, 0] —— 这正是 np.argmax 沿 axis=0(垂直方向,即按列)计算的结果:
row_indices = np.argmax(a, axis=0) print(row_indices) # 输出: [0 1 2 0]
✅ 原理说明:
-
axis=0表示沿行方向压缩(即对每一列内的所有行进行比较); -
np.argmax返回每列中第一个出现的最大值的行索引(若存在多个相同最大值,仅返回最小索引)。
⚠️ 注意事项:
- 若需获取每行最大值的列索引,应改用
axis=1; -
np.argmax返回的是索引数组,类型为np.ndarray,可直接用于高级索引,如a[row_indices, np.arange(a.shape[1])]可提取各列最大值; - 对含
NaN的数组,np.argmax会将NaN视为最大值(因NaN > any number为False,但其内部排序行为不稳定),建议先用np.nanmax/np.nanargmax处理缺失值。
综上,np.argmax(a, axis=0) 是获取列方向最大值行索引的标准、高效且向量化的方式,无需循环或 np.where,是 NumPy 数据分析中的基础必备技巧。

















