I have a 2 dimensional NumPy array. I know how to get the maximum values over axes:
>>> a = array([[1,2,3],[4,3,1]]) >>> amax(a,axis=0) array([4, 3, 3])
How can I get the indices of the maximum elements? I would like as output array([1,1,0]) instead.
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
>>> a.argmax(axis=0) array([1, 1, 0])
Method 2
>>> 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
Method 3
argmax() will only return the first occurrence for each row.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html
If you ever need to do this for a shaped array, this works better than 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())
You can also change your conditions:
indices = np.where(a >= 1.5)
The above gives you results in the form that you asked for. Alternatively, you can convert to a list of x,y coordinates by:
x_y_coords = zip(indices[0], indices[1])
Method 4
There is argmin() and argmax() provided by numpy that returns the index of the min and max of a numpy array respectively.
Say e.g for 1-D array you’ll do something like this
import numpy as np
a = np.array([50,1,0,2])
print(a.argmax()) # returns 0
print(a.argmin()) # returns 2
And similarly for multi-dimensional array
import numpy as np
a = np.array([[0,2,3],[4,30,1]])
print(a.argmax()) # returns 4
print(a.argmin()) # returns 0
Note that these will only return the index of the first occurrence.
Method 5
v = alli.max() index = alli.argmax() x, y = index/8, index%8
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