2010-08-27 8 views

risposta

110

Il metodo argmax() dovrebbe essere d'aiuto.

Aggiornamento

(Dopo aver letto commenti) Credo che il metodo di argmax() avrebbe funzionato per gli array multidimensionali pure. La documentazione collegata fornisce un esempio di questo:

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

Aggiornamento 2

(Grazie a KennyTM 's commento) È possibile utilizzare unravel_index(a.argmax(), a.shape) per ottenere l'indice come una tupla:

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

ma ho un array multidimensionale. – kame

+0

@kame: risposta aggiornata. Vedi sopra. –

+50

Usa 'unravel_index (a.argmax(), a.shape)' per ottenere l'indice come una tupla. – kennytm

4

(modifica) Mi riferivo a una vecchia risposta che era stata cancellata. E la risposta accettata è arrivata dopo la mia. Sono d'accordo che argmax è meglio della mia risposta.

Non sarebbe più leggibile/intuitivo fare così?

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

Oppure,

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

Inutile lento, perché calcoli il massimo e poi lo confronti a tutti di a. unravel_index (a.argmax(), a.shape). – Peter

+0

Ho votato a favore perché non presuppone nulla sul numero di occorrenze di a.max() in a. Mentre a.argmax() restituirà la "prima" occorrenza (che è mal definita nel caso di una matrice multidimensionale poiché dipende dalla scelta del percorso trasversale). https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html#numpy.argmax Penso anche che np.where() sia una scelta più naturale/leggibile piuttosto che np.nonzero(). – FizxMike

Problemi correlati