获取numpy数组中最大项的位置

时间:2010-08-27 12:46:53

标签: python arrays indexing numpy

如何获得多维numpy数组中最大项的位置?

4 个答案:

答案 0 :(得分:142)

argmax()方法应该会有所帮助。

<强>更新

(阅读评论后)我相信argmax()方法也适用于多维数组。链接的文档给出了一个例子:

>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3

更新2

(感谢KennyTM的评论)您可以使用unravel_index(a.argmax(), a.shape)将索引作为元组获取:

>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)

答案 1 :(得分:4)

(编辑)我指的是已删除的旧答案。接受的答案是在我的之后。我同意argmax比我的回答更好。

这样做会不会更具可读性/直觉性?

numpy.nonzero(a.max() == a)
(array([1]), array([0]))

或者,

numpy.argwhere(a.max() == a)

答案 2 :(得分:0)

您可以简单地编写一个函数(仅在2d中有效):

def argmax_2d(matrix):
    maxN = np.argmax(matrix)
    (xD,yD) = matrix.shape
    if maxN >= xD:
        x = maxN//xD
        y = maxN % xD
    else:
        y = maxN
        x = 0
    return (x,y)

答案 3 :(得分:0)

另一种方法是将numpy数组更改为list并使用maxindex方法:

List = np.array([34, 7, 33, 10, 89, 22, -5])
_max = List.tolist().index(max(List))
_max
>>> 4