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