Подтвердить что ты не робот

Как сделать numpy.argmax возвращать все вхождения максимума?

Я пытаюсь найти функцию, которая возвращает все вхождения максимума в данный список.

numpy.argmax, однако возвращает только первое обнаруженное в нем событие. Например:

from numpy import argmax

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

print winner

дает только индекс 0. Но я хочу, чтобы он дал все индексы: 0, 3, 5.

4b9b3361

Ответ 1

Поскольку документация np.argmax говорит: "В случае множественных вхождений максимальных значений возвращаются индексы, соответствующие первому вхождению", поэтому вам понадобится другая стратегия.

Один из вариантов: np.argwhere в сочетании с 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]

Ответ 2

Гораздо проще...

list [list == np.max(list)]