zeros array python multidimensional-array numpy

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