Mam dwuwymiarową tablicę NumPy. Wiem, jak uzyskać maksymalne wartości na osiach:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Jak mogę uzyskać wskaźniki maksymalnych elementów? Więc chciałbym jako wyjściearray([1,1,0])
>>> a.argmax(axis=0)
array([1, 1, 0])
źródło
a = np.array([[1,4,3],[4,3,1]])
aby zobaczyć, że powracai,j==0,1
i pomija rozwiązanie wi,j==1,0
. Dla wskaźników wszystkich maksimów użyj zamiast tegoi,j = where(a==a.max()
.argmax()
zwróci tylko pierwsze wystąpienie dla każdego wiersza. http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.htmlJeśli kiedykolwiek będziesz musiał to zrobić dla tablicy shape, działa to lepiej niż
unravel
:Możesz także zmienić swoje warunki:
Powyższe daje wyniki w postaci, o którą prosiłeś. Alternatywnie możesz przekonwertować na listę współrzędnych x, y przez:
źródło
indices = np.where(a==a.max())
w linii 3?.max()
zamiast.argmax()
. Edytuj odpowiedźx_y_coord = [(0, 2), (1, 1)]
tego, że NIE pasuje do odpowiedzi @eumiro i jest błędne. Na przykład spróbuj z,a = array([[7,8,9],[10,11,12]])
aby zobaczyć, że twój kod nie ma żadnego trafienia na to wejście.unravel
Wspomniałeś również, że działa to lepiej niż , ale rozwiązanie opublikowane przez @blas rozwiązuje problem absolutnego maksimum, a nie przesuwania się wzdłuż jednej osi.źródło