python - array - numpy transpose
Argmax de matriz numpy que devuelve índices no planos (3)
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.
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?
Para obtener el índice no plano de todas las ocurrencias del valor máximo, puede modificar ligeramente la respuesta de argwhere
usando argwhere
lugar de where
:
np.argwhere(a==a.max())
>>> a = np.array([[1,2,4],[4,3,4]])
>>> np.argwhere(a==a.max())
array([[0, 2],
[1, 0],
[1, 2]])
Puede usar 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
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, comparando con argmax
, devuelve las coordenadas de todos los elementos igual al máximo. argmax
devuelve solo uno de ellos ( np.ones(5).argmax()
devuelve 0
).