다차원 NumPy 배열에서 가장 큰 값의 위치를 ​​가져옵니다.


83

다차원 NumPy 배열에서 가장 큰 값의 위치 (인덱스)를 어떻게 얻을 수 있습니까?


똑같이 큰 값을 가진 여러 위치가있는 경우 모두 또는 첫 번째 (또는 마지막 또는 일부) 만 필요합니까?
Trilarion

답변:


179

argmax()방법은 도움이 될 것입니다.

최신 정보

(댓글을 읽은 후)이 argmax()방법이 다차원 배열에서도 작동 할 것이라고 생각합니다 . 링크 된 문서는 이에 대한 예를 제공합니다.

>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3

업데이트 2

( KennyTM 의 의견에 감사드립니다 ) unravel_index(a.argmax(), a.shape)인덱스를 튜플로 가져 오는 데 사용할 수 있습니다 .

>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)

1
하지만 다차원 배열이 있습니다.
kame 2010-08-27

86
unravel_index(a.argmax(), a.shape)인덱스를 튜플로 가져 오는 데 사용 합니다.
kennytm

숫자 3은 무엇을 의미합니까? 알았어. 나는 (1,0)을 찾고 있었다.
kame 2010-08-27

2
정말이 있어야 내장 기능 튜플로 값을 얻기 위해
endolith


6

(편집) 삭제 된 이전 답변을 언급했습니다 . 그리고 받아 들인 대답은 내 뒤를 따랐습니다. 나는 그것이 argmax내 대답보다 낫다는 데 동의합니다 .

이렇게하는 것이 더 읽기 쉽고 직관적이지 않습니까?

numpy.nonzero(a.max() == a)
(array([1]), array([0]))

또는,

numpy.argwhere(a.max() == a)

4
최대 값을 계산 한 다음 모든 a와 비교하기 때문에 불필요하게 느립니다. unravel_index (a.argmax (), a.shape).
Peter

나는 a.max ()의 발생 횟수에 대해 아무것도 가정하지 않기 때문에 이것을 투표했습니다. 반면 a.argmax ()는 "처음"발생을 반환합니다 (순회 경로 선택에 따라 다차원 배열의 경우 잘못 정의 됨). docs.scipy.org/doc/numpy/reference/generated/… 또한 np.where ()가 np.nonzero ()보다 더 자연스럽고 읽기 쉬운 선택이라고 생각합니다.
FizxMike

2

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

0

다른 방법은 변화입니다 numpy에 배열 list사용 maxindex방법 :

List = np.array([34, 7, 33, 10, 89, 22, -5])
_max = List.tolist().index(max(List))
_max
>>> 4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.