Получить позицию самого большого элемента в многомерном массиве - PullRequest
64 голосов
/ 27 августа 2010

Как я могу получить позицию самого большого элемента в многомерном массиве numpy?

Ответы [ 3 ]

147 голосов
/ 27 августа 2010

Метод argmax() должен помочь.

Обновление

(после прочтения комментария) Я считаю, что метод argmax() будет работать и для многомерных массивов. Связанная документация приводит пример этого:

>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3

Обновление 2

(благодаря комментарию KennyTM ) Вы можете использовать unravel_index(a.argmax(), a.shape), чтобы получить индекс в виде кортежа:

>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)
4 голосов
/ 24 февраля 2012

(редактировать) Я имел в виду старый ответ, который был удален . И принятый ответ пришел после моего. Я согласен, что argmax лучше моего ответа.

Разве это не было бы более читабельным / интуитивно понятным?

numpy.nonzero(a.max() == a)
(array([1]), array([0]))

Или,

numpy.argwhere(a.max() == a)
0 голосов
/ 13 января 2019

Вы можете просто написать функцию (которая работает только в 2d):

def argmax_2d(matrix):
    maxN = np.argmax(matrix)
    (xD,yD) = matrix.shape
    if maxN >= xD:
        x = maxN//xD
        y = maxN % xD
    else:
        y = maxN
        x = 0
    return (x,y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...