Cómo devolver todos los índices mínimos en numpy

Estoy un poco confundido al leer la documentación de la función argmin en numpy . Parece que debería hacer el trabajo:

Leyendo esto

Devuelve los índices de los valores mínimos a lo largo de un eje.

Podria asumir que

np.argmin([5, 3, 2, 1, 1, 1, 6, 1]) 

devolverá una matriz de todos los índices: que será [3, 4, 5, 7]

Pero en lugar de esto solo devuelve 3 . ¿Dónde está la captura, o qué debo hacer para obtener mi resultado?

Esa documentación tiene más sentido cuando piensas en arreglos multidimensionales.

 >>> x = numpy.array([[0, 1], ... [3, 2]]) >>> x.argmin(axis=0) array([0, 0]) >>> x.argmin(axis=1) array([0, 1]) 

Con un eje especificado, argmin toma argmin unidimensionales a lo largo del eje dado y devuelve el primer índice del valor mínimo de cada subarray. No devuelve todos los índices de un solo valor mínimo.

Para obtener todos los índices del valor mínimo, podrías hacer

 numpy.where(x == x.min()) 

Consulte la documentación de numpy.argmax (a la que hacen referencia los documentos para numpy.argmin ):

En caso de ocurrencias múltiples de los valores máximos, se devuelven los índices correspondientes a la primera ocurrencia.

La redacción de la documentación (“índices” en lugar de “índice”) se refiere al caso multidimensional cuando se proporciona el axis .

Entonces, no puedes hacerlo con np.argmin . En su lugar, esto funcionará:

 np.where(arr == arr.min()) 

Suponiendo que desea los índices de una lista, no una matriz numpy, intente

 my_list = [5, 3, 2, 1, 1, 1, 6, 1] np.where(my_list == min(my_list))[0] 

El índice [0] se debe a que numpy devuelve una tupla de tu respuesta y nada (responde como una matriz numpy). No me preguntes por qué.