2011-03-29 128 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

相關問題