Python 如何获取NumPy数组中沿一个轴的最大元素的索引

Python 如何获取NumPy数组中沿一个轴的最大元素的索引,python,numpy,max,indices,Python,Numpy,Max,Indices,我有一个二维NumPy数组。我知道如何获得轴上的最大值: >>> a = array([[1,2,3],[4,3,1]]) >>> amax(a,axis=0) array([4, 3, 3]) 如何获得最大元素的索引?我想改为作为输出数组([1,1,0])。argmax()将只返回每行的第一个匹配项。 >>> a.argmax(axis=0) array([1, 1, 0]) 如果您需要对成形阵列执行此操作,则此操作比“解列”(un

我有一个二维NumPy数组。我知道如何获得轴上的最大值:

>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
如何获得最大元素的索引?我想改为作为输出
数组([1,1,0])

argmax()
将只返回每行的第一个匹配项。
>>> a.argmax(axis=0)

array([1, 1, 0])

如果您需要对成形阵列执行此操作,则此操作比“解列”(unravel)效果更好:

import numpy as np
a = np.array([[1,2,3], [4,3,1]])  # Can be of any shape
indices = np.where(a == a.max())
您还可以更改您的条件:

indices = np.where(a >= 1.5)
上面以您要求的形式给出结果。或者,您可以通过以下方式转换为x、y坐标列表:

x_y_coords =  zip(indices[0], indices[1])
numpy
提供的
argmin()
argmax()
分别返回numpy数组的最小值和最大值的索引

例如,对于1-D阵列,您将执行以下操作

将numpy导入为np
a=np.数组([50,1,0,2])
打印(a.argmax())#返回0

print(a.argmin())#返回2
这对我不起作用。。。你是说第三行的索引=np.where(a==a.max())?你说得对,atomh33ls!谢谢你发现了。我已修复该语句,将第二个等号包含在适当的条件中。@SevakPrime,有第二个错误由@atomh33ls,
.max()
指出,而不是
.argmax()
。请编辑answer@gg349,这取决于你想要什么。argmax沿着一个轴提供它,这似乎是OP希望它通过eumiro批准该答案的方式。我看到@atomh33ls和我建议的修正导致数组中最大元素的索引,而OP询问的是沿着某个轴的最大元素。但是请注意,您当前的解决方案导致
x_y_coord=[(0,2)、(1,1)]
与@eumiro-answer不匹配,这是错误的。例如,尝试使用
a=array([[7,8,9],[10,11,12]])
查看您的代码对该输入没有任何影响。您还提到,这比分解更好,但是@blas发布的解决方案回答了绝对最大值的问题,而不是沿着一个轴的jsut。请注意,这个答案是误导性的。它计算数组的最大元素在所有轴上的索引,而不是在OP询问的给定轴上:这是错误的。此外,如果有多个最大值,它只检索第一个最大值的索引:应该指出这一点。尝试使用
a=np.array([[1,4,3],[4,3,1]])
查看它是否返回
i,j==0,1
,并忽略
i,j==1,0
处的解。对于所有最大值的索引,使用
i,j=where(a==a.max()
。这适用于整数,但如何处理浮点值和介于0和之间的数字1@Priyomsaha这适用于浮点数数组,结果数组是一个索引数组,其中最大的浮点数在每列中。在第一列中,第二个元素是最大的,在第二列中,第二个元素是最大的t、 在第三列中,第一个元素是最大的。
indices = np.where(a >= 1.5)
x_y_coords =  zip(indices[0], indices[1])