2011-03-29 75 views
66

我有一个2维NumPy数组。我知道如何获得轴上的最大值:如何获取沿一个轴的numpy阵列中最大元素的索引

>>> a = array([[1,2,3],[4,3,1]]) 
>>> amax(a,axis=0) 
array([4, 3, 3]) 

如何获取最大元素的索引?所以我想作为输出array([1,1,0])

+1

具体而言,“最大元素”是什么意思? – 2013-04-24 11:20:08

回答

85
>>> a.argmax(axis=0) 

array([1, 1, 0]) 
5
v = alli.max() 
index = alli.argmax() 
x, y = index/8, index%8 
69
>>> 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 
+1

这很好,因为它适用于多维数组。 – user1311069 2014-09-24 21:58:51

+4

请注意,这个答案是误导性的。它会根据OP的要求计算整个轴上数组的最大元素索引,而不是沿给定轴的索引:它是错误的。而且,如果有多个最大值,它将只检索第一个最大值的索引:应该指出这一点。尝试用'a = np.array([[1,4,3],[4,3,1]])'看看它是否返回'i,j == 0,1',并且忽略' I,J == 1,0'。对于所有最大值的索引,而不是'i,j = where(a == a.max()'。 – gg349 2015-09-02 19:28:05

24

argmax()只返回每一行的第一次出现。 http://docs.scipy.org/doc/numpy/reference/generated/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]) 
+2

这对我来说不起作用...你的意思是'indices = np.where(a == a.max())'在第3行? – atomh33ls 2014-07-07 10:32:00

+0

你是对的,atomh33ls!感谢您发现这一点,我已经修复了这个声明,以包含适当的条件的第二个等号 – SevakPrime 2014-08-28 19:14:14

+0

@SevakPrime,指出了第二个错误out @ by atomh33ls,'.max()'而不是'.argmax()'。请编辑回答 – gg349 2015-08-30 15:37:47

相关问题