다차원 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사용 max및 index방법 :

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.