한 축을 따라 numpy 배열에서 최대 요소의 인덱스를 얻는 방법


118

2 차원 NumPy 배열이 있습니다. 축에 대해 최대 값을 얻는 방법을 알고 있습니다.

>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])

최대 요소의 인덱스는 어떻게 얻을 수 있습니까? 그래서 출력으로하고 싶습니다array([1,1,0])

답변:


142
>>> a.argmax(axis=0)

array([1, 1, 0])

1
이것은 정수에 대해 잘 작동하지만 float 값과 0과 1 사이의 숫자에 대해 무엇을 할 수
있습니까

100
>>> 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

11
이 답변은 오해의 소지가 있습니다. OP가 묻는 것처럼 주어진 축을 따라가 아니라 모든 축에 걸쳐 배열의 최대 요소 인덱스를 계산합니다. 또한 최대 값이 두 개 이상인 경우 첫 번째 최대 값 만 인덱스를 검색합니다.이를 지적해야합니다. 와 시도 a = np.array([[1,4,3],[4,3,1]])가 반환 있는지 i,j==0,1, 그리고의 솔루션을 무시한다 i,j==1,0. 모든 최대 값의 인덱스를 위해 대신 사용하십시오 i,j = where(a==a.max().
gg349

36

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])

2
이건 저에게 효과가 없었어요 ... indices = np.where(a==a.max())3 번 줄에있는 건가요?
atomh33ls 2014-07-07

당신이 맞아요, atomh33ls! 찾아 주셔서 감사합니다. 적절한 조건에 대해 두 번째 등호를 포함하도록 해당 문을 수정했습니다.
SevakPrime 2014 년

@SevakPrime, .max()대신 @ atomh33ls가 지적한 두 번째 오류 가 .argmax()있습니다. 답을 수정하세요
gg349

@ gg349, 그것은 당신이 원하는 것에 달려 있습니다. argmax는 OP가 eumiro가 그 대답을 승인하기를 원하는 방식으로 보이는 축을 따라 제공합니다.
SevakPrime

@ atomh33ls 수정이 배열의 가장 큰 요소의 인덱스로 이어지고 OP는 특정 축을 따라 가장 큰 요소에 대해 묻습니다. 그러나 현재 솔루션이 x_y_coord = [(0, 2), (1, 1)]@eumiro 답변과 일치하지 않으며 잘못되었습니다. 예를 들어, a = array([[7,8,9],[10,11,12]])코드에이 입력에 대한 적중이 없는지 확인하십시오. 또한 이것이 더 잘 작동한다고 언급 unravel했지만 @blas가 게시 한 솔루션은 한 축을 따라 jsut이 아닌 절대 최대 문제에 답합니다.
gg349

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.