У мене є двовимірний масив NumPy. Я знаю, як отримати максимальні значення по осях:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Як я можу отримати показники максимальних елементів? Тому я хотів би як вихідarray([1,1,0])
У мене є двовимірний масив NumPy. Я знаю, як отримати максимальні значення по осях:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Як я можу отримати показники максимальних елементів? Тому я хотів би як вихідarray([1,1,0])
Відповіді:
>>> import numpy as np
>>> a = np.array([[1,2,3],[4,3,1]])
>>> i,j = np.unravel_index(a.argmax(), a.shape)
>>> a[i,j]
4
a = np.array([[1,4,3],[4,3,1]])
переконатися, що воно повертається i,j==0,1
, і нехтувати рішенням на i,j==1,0
. Для показників усіх максимумів використовуйте натомість i,j = where(a==a.max()
.
argmax()
поверне лише перше виникнення для кожного рядка.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html
Якщо вам коли-небудь потрібно зробити це для фігурного масиву, це працює краще, ніж unravel
:
import numpy as np
a = np.array([[1,2,3], [4,3,1]]) # Can be of any shape
indices = np.where(a == a.max())
Ви також можете змінити свої умови:
indices = np.where(a >= 1.5)
Вищезазначене дає результати у формі, про яку ви просили. Крім того, ви можете перетворити на список координат x, y за допомогою:
x_y_coords = zip(indices[0], indices[1])
indices = np.where(a==a.max())
рядок 3?
.max()
замість .argmax()
. Відредагуйте відповідь
x_y_coord = [(0, 2), (1, 1)]
того, що НЕ відповідає відповіді @eumiro, і є неправильним. Наприклад, спробуйте a = array([[7,8,9],[10,11,12]])
переконатися, що ваш код не має жодного звернення на цьому вході. Ви також згадуєте, що це працює краще unravel
, але рішення, розміщене @blas, відповідає на проблему абсолютного максимуму, а не jsut уздовж однієї осі.