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é.