2011-03-29 14 views

Respuesta

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

Esto es bueno porque funciona en matrices multidimensionales. – user1311069

+4

Tenga en cuenta que esta respuesta es engañosa. Calcula el índice del elemento máximo de la matriz en todos los ejes, no a lo largo de un eje dado, como pregunta el OP: es incorrecto. Además, si hay más de un máximo, recupera los índices solo del primer máximo: esto debe señalarse. Pruebe con 'a = np.array ([[1,4,3], [4,3,1]])' para ver que devuelve 'i, j == 0,1', y omite la solución en' i, j == 1,0'. Para los índices de todos los máximos utilice en su lugar 'i, j = where (a == a.max()'. – gg349

24

argmax() sólo devolverá la primera aparición para cada fila. http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html

Si alguna vez tiene que hacer esto para una matriz de forma, esto funciona mejor que 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()) 

También puede cambiar sus condiciones:

indices = np.where(a >= 1.5) 

Lo anterior le da resultados en la forma que usted solicitó. Alternativamente, puede convertir a una lista de coordenadas x, y por:

x_y_coords = zip(indices[0], indices[1]) 
+2

Esto no funcionó para mí ... ¿Quiere decir 'indices = np.where (a == a.max()) 'en la línea 3? – atomh33ls

+0

Tienes razón, atomh33ls! Gracias por detectar eso. He corregido esa declaración para incluir el segundo signo igual para el condicional apropiado. – SevakPrime

+0

@SevakPrime, había un segundo error señalado out por @ atomh33ls, '.max()' en lugar de '.argmax()'. Edite la respuesta – gg349

Cuestiones relacionadas