Как вернуть все минимальные индексы в numpy
Я немного смущаюсь читать документацию функцию argmin в numpy.
Похоже, что он должен выполнять эту работу:
Чтение этого
Возвращает индексы минимальных значений вдоль оси.
Я мог бы предположить, что
np.argmin([5, 3, 2, 1, 1, 1, 6, 1])
вернет массив всех индексов: который будет [3, 4, 5, 7]
Но вместо этого он возвращает только 3
. Где улов или что мне делать, чтобы получить результат?
Ответы
Ответ 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())