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