J'essaie d'obtenir les indices de l'élément maximum dans un tableau Numpy . Cela peut être fait avec numpy.argmax
. Mon problème est que j'aimerais trouver l'élément le plus important de tout le tableau et en obtenir les indices.
numpy.argmax
peut être appliqué le long d'un axe, ce qui n'est pas ce que je veux, ou sur le tableau aplati, ce qui est un peu ce que je veux.
Mon problème est que l'utilisation de numpy.argmax
avec axis=None
renvoie l'index simple lorsque je souhaite l'index multidimensionnel.
Je pourrais utiliser divmod
pour obtenir un index non plat, mais cela semble moche. Y a-t-il une meilleure façon de faire cela?
Vous pouvez utiliser numpy.unravel_index()
sur le résultat 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())
renvoie les coordonnées du ou des éléments maximum, mais doit analyser le tableau deux fois.
>>> a = np.array(((3,4,5),(0,1,2)))
>>> np.where(a==a.max())
(array([0]), array([2]))
Ceci, en comparant à argmax
, renvoie les coordonnées de tous les éléments égales au maximum. argmax
renvoie un seul d'entre eux (np.ones(5).argmax()
renvoie 0
).
Pour obtenir l'index non uniforme de toutes les occurrences de la valeur maximale, vous pouvez modifier légèrement answer d'eumiro en utilisant argwhere
au lieu 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]])