2012-02-28 38 views
52

我試圖獲取Numpy數組中最大元素的索引。 這可以使用numpy.argmax完成。我的問題是,我想找到整個陣列中最大的元素,並獲得指數。返回非平坦索引的numpy數組的argmax

numpy.argmax可以沿着一個軸應用,這不是我想要的,或者在平面陣列上,這是我想要的。

我的問題是,使用numpy.argmaxaxis=None返回平面索引時,我想要的多維索引。

我可以使用divmod來獲得一個非平坦的索引,但這感覺很難看。有沒有更好的方法來做到這一點?

回答

90

你可以對numpy.argmax()結果使用numpy.unravel_index()

>>> a = numpy.random.random((10, 10)) 
>>> numpy.unravel_index(a.argmax(), a.shape) 
(6, 7) 
>>> a[6, 7] == a.max() 
True 
16
np.where(a==a.max()) 

返回最大元素的座標,但必須解析數組兩次。

>>> a = np.array(((3,4,5),(0,1,2))) 
>>> np.where(a==a.max()) 
(array([0]), array([2])) 

這與argmax相比,返回所有元素的座標等於最大值。 argmax只返回其中的一個(np.ones(5).argmax()返回0)。

+5

這將遍歷數組三次,不僅兩次。有一次找到最大值,第二次創建'=='的結果,第三次從這個結果中提取「真」值。請注意,可能有多個項目等於最大值。 – 2012-02-28 14:40:27