Подтвердить что ты не робот

Получить позицию самого большого элемента в многомерном массиве

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

4b9b3361

Ответ 1

Метод 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)

Ответ 2

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

Не было бы более удобочитаемым/интуитивным делать это?

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

Или

numpy.argwhere(a.max() == a)

Ответ 3

Вы можете просто написать функцию (которая работает только в 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)