如何获得多维numpy数组中最大项的位置?
答案 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
并使用max
和index
方法:
List = np.array([34, 7, 33, 10, 89, 22, -5])
_max = List.tolist().index(max(List))
_max
>>> 4