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

Как вернуть все минимальные индексы в numpy

Я немного смущаюсь читать документацию функцию argmin в numpy. Похоже, что он должен выполнять эту работу:

Чтение этого

Возвращает индексы минимальных значений вдоль оси.

Я мог бы предположить, что

np.argmin([5, 3, 2, 1, 1, 1, 6, 1])

вернет массив всех индексов: который будет [3, 4, 5, 7]

Но вместо этого он возвращает только 3. Где улов или что мне делать, чтобы получить результат?

4b9b3361

Ответ 1

Эта документация имеет больше смысла, когда вы думаете о многомерных массивах.

>>> x = numpy.array([[0, 1],
...                  [3, 2]])
>>> x.argmin(axis=0)
array([0, 0])
>>> x.argmin(axis=1)
array([0, 1])

При заданной оси argmin принимает одномерные подмассивы вдоль данной оси и возвращает первый индекс минимального значения каждого подмассива. Он не возвращает все индексы одного минимального значения.

Чтобы получить все индексы минимального значения, вы можете сделать

numpy.where(x == x.min())

Ответ 2

См. документацию для numpy.argmax (на которую ссылаются документы для numpy.argmin):

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

Формулировка документации ( "индексы" вместо "индекса" ) относится к многомерному случаю, когда предоставляется axis.

Итак, вы не можете сделать это с помощью np.argmin. Вместо этого это будет работать:

np.where(arr == arr.min())