How can I get get the position (indices) of the largest value in a multi-dimensional NumPy array?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The argmax() method should help.
Update
(After reading comment) I believe the argmax() method would work for multi dimensional arrays as well. The linked documentation gives an example of this:
>>> a = array([[10,50,30],[60,20,40]]) >>> maxindex = a.argmax() >>> maxindex 3
Update 2
(Thanks to KennyTM‘s comment) You can use unravel_index(a.argmax(), a.shape) to get the index as a tuple:
>>> from numpy import unravel_index >>> unravel_index(a.argmax(), a.shape) (1, 0)
Method 2
(edit) I was referring to an old answer which had been deleted. And the accepted answer came after mine. I agree that argmax is better than my answer.
Wouldn’t it be more readable/intuitive to do like this?
numpy.nonzero(a.max() == a) (array([1]), array([0]))
Or,
numpy.argwhere(a.max() == a)
Method 3
You can simply write a function (that works only in 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)
Method 4
An alternative way is change numpy array to list and use max and index methods:
List = np.array([34, 7, 33, 10, 89, 22, -5]) _max = List.tolist().index(max(List)) _max >>> 4
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0