web-dev-qa-db-fra.com

Obtenir la position du plus gros élément d'un tableau numpy

Comment obtenir la position du plus gros élément d'un tableau numpy multidimensionnel?

60
kame

La méthode argmax() devrait vous aider.

Mettre à jour

(Après avoir lu le commentaire) Je pense que la méthode argmax() fonctionnerait également pour les tableaux multidimensionnels. La documentation liée en donne un exemple:

>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3

Mise à jour 2

(Merci au commentaire de KennyTM ) Vous pouvez utiliser unravel_index(a.argmax(), a.shape) pour obtenir l'index sous forme de tuple:

>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)
137
Manoj Govindan

(edit) Je faisais allusion à une ancienne réponse qui avait été supprimée . Et la réponse acceptée est venue après la mienne. Je conviens que argmax est préférable à ma réponse.

Ne serait-il pas plus lisible/intuitif de faire cela?

numpy.nonzero(a.max() == a)
(array([1]), array([0]))

Ou,

numpy.argwhere(a.max() == a)
4
otterb

Vous pouvez simplement écrire une fonction (qui ne marche qu'en 2D): 

def argmax_2d(matrix):
    maxN = np.argmax(matrix)
    (xD,yD) = matrix.shape
    if maxN >= xD:
        x = maxN//xD
        y = maxN % xD
    else:
        y = maxN
        x = 0
    return (x,y)
0
iFederx