快速寻找Numpy二维数组中的最值及其下标

241 阅读1分钟

一、通过np.max和np.where

通过np.max()找矩阵的最大值,再通过np.where获得最大值的位置。

a = np.random.randint(10, 100, size=9)
a = a.reshape((3,3))

r, c = np.where(a == np.max(a))
print(r,c)   # 输出:(array([1]), array([1]))

输出的是两个array,分别是x和y数组,即找出了和这个最值相等的所有位置。



二、通过np.argmax

np.argmax可以直接返回最大值的索引,不过索引值是一维的,需要做一下处理得到其在二维矩阵中的位置。

a = np.random.randint(10, 100, size=9)
a = a.reshape((3,3))


m = np.argmax(a)
r, c = divmod(m, a.shape[1])    # r和c分别为商和余数,即最大值所在的行和列
                                # m是被除数, a.shape[1]是除数
print(r, c)   # 输出:(2, 2)

直接输出一个tuple,说明只找到了最前面的那个

对于二维数组

对于二维矩阵,默认是求全局最值。也可以指定方向(是求每行的最大值还是求每列的最大值,结果也是一个ndarray),如下:

np.max(a,axis=0) #每列最大
np.max(a,axis=1) #每行最大