Argmax из массива numpy возвращаясь номера-телевизор с индексами


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

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

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

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

3 61

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