2010-08-27 33 views

Respuesta

110

El método argmax() debería ayudar.

actualización

(Después de leer comentario) Creo que el método argmax() funcionaría para las matrices multidimensionales también. La documentación vinculada da un ejemplo de esto:

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

Actualización 2

(Gracias a KennyTM 's comentario) Puede utilizar unravel_index(a.argmax(), a.shape) para obtener el índice como una tupla:

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

pero tengo una matriz multidimensional. – kame

+0

@kame: respuesta actualizada. Véase más arriba. –

+50

Use 'unravel_index (a.argmax(), a.shape)' para obtener el índice como una tupla. – kennytm

4

(Editar) Me refería a una respuesta anterior que se había eliminado. Y la respuesta aceptada vino después de la mía. Estoy de acuerdo en que argmax es mejor que mi respuesta.

¿No sería más fácil de leer/intuitivo hacer esto?

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

O

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

innecesariamente lento, porque calcula el máximo y luego lo compara con todo a. unravel_index (a.argmax(), a.shape). – Peter

+0

He votado a favor de esto porque no asume nada sobre el número de apariciones de a.max() en a. Mientras que a.argmax() devolverá la "primera" ocurrencia (que está mal definida en el caso de una matriz multidimensional ya que depende de la elección de la ruta transversal). https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html#numpy.argmax También creo que np.where() es una opción más natural/legible en lugar de np.nonzero(). – FizxMike

Cuestiones relacionadas