Ответ 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
Я пытаюсь получить индексы максимального элемента в массиве Numpy.
Это можно сделать, используя numpy.argmax
. Моя проблема в том, что я хотел бы найти самый большой элемент во всем массиве и получить индексы этого.
numpy.argmax
может применяться либо вдоль одной оси, что не то, что я хочу, либо от сплющенного массива, который является тем, что я хочу.
Моя проблема в том, что использование numpy.argmax
с axis=None
возвращает плоский индекс, когда мне нужен многомерный индекс.
Я мог бы использовать divmod
, чтобы получить не-плоский индекс, но это кажется уродливым. Есть ли лучший способ сделать это?
Вы можете использовать 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
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
).