2012-02-28 12 views
52

Estoy tratando de obtener los índices del elemento máximo en una matriz Numpy. Esto se puede hacer usando numpy.argmax. Mi problema es que me gustaría encontrar el elemento más grande en toda la matriz y obtener los índices de eso.Argmax de matriz numpy que devuelve índices no planos

numpy.argmax se puede aplicar a lo largo de un eje, que no es lo que quiero, o en la matriz aplanada, que es lo que quiero.

Mi problema es que usar numpy.argmax con axis=None devuelve el índice plano cuando quiero el índice multidimensional.

Podría usar divmod para obtener un índice no plano, pero esto se siente feo. ¿Hay alguna forma mejor de hacer esto?

Respuesta

90

Usted podría utilizar numpy.unravel_index() en el resultado de numpy.argmax():

>>> 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()) 

devuelve las coordenadas de los elementos máximos, pero tiene que analizar la matriz dos veces.

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

Esto, en comparación con argmax, devuelve coordenadas de todos los elementos que son iguales al máximo. argmax devuelve solo uno de ellos (np.ones(5).argmax() devuelve 0).

+5

Esto se repetirá la matriz tres veces, no sólo dos veces. Una vez para encontrar el máximo, una segunda vez para generar el resultado de '==', y una tercera vez para extraer los valores 'True' de este resultado. Tenga en cuenta que puede haber más de un elemento igual al máximo. –

Cuestiones relacionadas