Answers:
>>> import numpy as np
>>> a = np.array([[1,2,3],[4,3,1]])
>>> i,j = np.unravel_index(a.argmax(), a.shape)
>>> a[i,j]
4
a = np.array([[1,4,3],[4,3,1]])
查看它是否返回i,j==0,1
,并忽略了处的解决方案i,j==1,0
。对于所有最大值的索引,请改用i,j = where(a==a.max()
。
argmax()
将仅返回每一行的第一个匹配项。
http://docs.scipy.org/doc/numpy/reference/generation/numpy.argmax.html
如果您需要对整形阵列执行此操作,则此方法比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])
indices = np.where(a==a.max())
第3行吗?
.max()
而不是.argmax()
。请编辑答案
x_y_coord = [(0, 2), (1, 1)]
该结果与@eumiro答案不匹配,并且是错误的。例如,尝试a = array([[7,8,9],[10,11,12]])
查看您的代码对此输入没有任何影响。您还提到这比更好unravel
,但是@blas发布的解决方案回答了绝对最大值的问题,而不是沿一个轴的问题。