web-dev-qa-db-fra.com

Comment faire numpy.argmax retourner toutes les occurrences du maximum?

J'essaie de trouver une fonction qui renvoie toutes les occurrences du maximum dans une liste donnée.

numpy.argmax ne renvoie cependant que la première occurrence qu'il trouve. Par exemple:

from numpy import argmax

list = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6]
winner = argmax(list)

print winner

donne uniquement l'index 0. Mais je veux qu'il donne tous les indices: 0, 3, 5.

43
Marieke_W

Comme documentation de np.argmax dit: "En cas d'occurrences multiples des valeurs maximales, les indices correspondant à la première occurrence sont renvoyés.", vous aurez donc besoin d'une autre stratégie.

Une option que vous avez utilise np.argwhere en combinaison avec np.amax:

>>> import numpy as np
>>> listy = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6]
>>> winner = np.argwhere(listy == np.amax(listy))
>>> print(winner)
 [[0]
  [3]
  [5]]
>>> print(winner.flatten().tolist()) # if you want it as a list
[0, 3, 5]
62
jabaldonedo