2010-08-27 2 views

ответ

110

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

Update

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

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

Update 2

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

>>> from numpy import unravel_index 
>>> unravel_index(a.argmax(), a.shape) 
(1, 0) 
+1

Но у меня есть многомерный массив. – kame

+0

@kame: обновленный ответ. См. Выше. –

+50

Используйте 'unravel_index (a.argmax(), a.shape)', чтобы получить индекс как кортеж. – kennytm

4

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

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

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

Или

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

Исправлено медленно, потому что вы вычисляете max, а затем сравниваете его со всеми. unravel_index (a.argmax(), a.shape). – Peter

+0

Я голосовал за это, потому что он не принимает ничего о количестве вхождений a.max() в a. Принимая во внимание, что a.argmax() вернет «первое» возникновение (которое плохо определено в случае многомерного массива, поскольку оно зависит от выбора пути обхода). https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html#numpy.argmax Я также думаю, что np.where() является более естественным/читаемым, а не np.nonzero(). – FizxMike

Смежные вопросы