Argmax массива numpy, возвращающего неплоские индексы - PullRequest
70 голосов
/ 28 февраля 2012

Я пытаюсь получить индексы максимального элемента в массиве Numpy.Это можно сделать с помощью numpy.argmax.Моя проблема в том, что я хотел бы найти самый большой элемент во всем массиве и получить индексы этого.

numpy.argmax может быть применен либо вдоль одной оси, а это не то, что мне нужно, либо науплощенный массив, что-то вроде того, что я хочу.

Моя проблема в том, что использование numpy.argmax с axis=None возвращает плоский индекс, когда я хочу многомерный индекс.

Iможно использовать divmod, чтобы получить неплоский индекс, но это выглядит ужасно.Есть ли лучший способ сделать это?

Ответы [ 3 ]

124 голосов
/ 28 февраля 2012

Вы можете использовать numpy.unravel_index() в результате numpy.argmax():

>>> a = numpy.random.random((10, 10))
>>> numpy.unravel_index(a.argmax(), a.shape)
(6, 7)
>>> a[6, 7] == a.max()
True
16 голосов
/ 28 февраля 2012
np.where(a==a.max())

возвращает координаты максимального элемента (ов), но должен проанализировать массив дважды.

>>> a = np.array(((3,4,5),(0,1,2)))
>>> np.where(a==a.max())
(array([0]), array([2]))

Это, по сравнению с argmax, возвращает координаты всех элементов, равных максимуму. argmax возвращает только один из них (np.ones(5).argmax() возвращает 0).

1 голос
/ 10 июля 2018

Чтобы получить неплоский индекс всех вхождений максимального значения, вы можете слегка изменить ответ eumiro, используя argwhere вместо 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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...