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

Argmax numpy array, возвращающий не плоские индексы

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

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

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

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

4b9b3361

Ответ 1

Вы можете использовать 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

Ответ 2

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).