API · NumPy

파이썬 numpy.argmax()

numpy.argmax() 함수는 주어진 NumPy 배열에서 가장 높은 값을 가진 값의 인덱스를 반환합니다.

이 페이지의 내용

Python NumPy의 numpy.argmax()는 배열에서 최댓값의 인덱스를 반환하며, 값 자체를 반환하지는 않습니다. 반환된 인덱스로 해당 값을 가져오거나, axis를 지정해 각 슬라이스에서 인덱스 하나씩 구할 수 있습니다. 최댓값이 여러 번 나타나면 첫 번째 위치가 반환됩니다.

numpy.argmax()가 최댓값의 인덱스를 선택하는 방법

기본값인 axis=None에서는 numpy.argmax()가 배열의 모든 요소를 하나의 평탄화된 시퀀스로 간주해 검색합니다. 따라서 다차원 입력에서도 반환되는 인덱스는 그 시퀀스에서의 위치입니다. axis를 지정하면 해당 차원을 따라 검색하고, 나머지 슬라이스마다 인덱스를 반환합니다.

구문과 매개변수

함수 시그니처는 numpy.argmax(a, axis=None, out=None)입니다. a는 입력 배열 또는 배열처럼 동작하는 객체입니다. axis는 검색할 차원을 지정합니다. 생략하거나 None으로 설정하면 입력을 먼저 평탄화합니다. 2차원 배열에서 axis=0은 각 열을 아래로 검색해 행 인덱스를 반환하고, axis=1은 각 행을 가로로 검색해 열 인덱스를 반환합니다. 지정한 축은 결과의 모양에서 제거됩니다.

선택적 매개변수인 out은 결과를 받을 배열입니다. 이 배열의 모양은 결과의 모양과 일치해야 하며, 자료형은 반환되는 인덱스를 담을 수 있어야 합니다. 함수는 인덱스 하나 또는 인덱스 배열을 반환하므로, 해당 위치를 사용해 대응하는 최댓값을 가져올 수 있습니다.

1차원 및 다차원 배열에서 최댓값의 인덱스 찾기

다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

a = np.array([2, 6, 1, 5])
index = np.argmax(a)
print(index)
print(a[index])
1
6

여기서 최댓값은 6이고, NumPy 인덱스는 0부터 시작하므로 그 위치는 1입니다. 다차원 배열에서도 기본 동작은 행과 열의 쌍이 아니라 평탄화된 배열에서의 위치 하나를 반환합니다. 원래 배열 모양에서의 좌표가 필요하면 numpy.unravel_index로 이 위치를 좌표로 변환하세요.

import numpy as np

a = np.array([[2, 1, 6],
              [7, 4, 5]])
index = np.argmax(a)
print(index)
print(np.unravel_index(index, a.shape))
3
(np.int64(1), np.int64(0))

평탄화된 위치 3은 행 1, 열 0을 가리키며, 그 위치의 값은 7입니다.

각 슬라이스의 인덱스를 찾도록 축 선택하기

모양이 (2, 3)인 2차원 배열에서 axis=0은 행 차원을 축소하므로 열마다 행 인덱스 하나씩 반환합니다. axis=1은 열 차원을 축소하므로 행마다 열 인덱스 하나씩 반환합니다. 이 인덱스는 원래 배열을 평탄화했을 때의 위치가 아니라, 검색 대상인 각 슬라이스 안에서의 위치입니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

a = np.array([[2, 1, 6],
              [7, 4, 5]])
print(np.argmax(a, axis=0))
print(np.argmax(a, axis=1))
[1 1 0]
[2 0]

예를 들어 첫 번째 열의 최댓값은 7이며 행 인덱스는 1입니다. 첫 번째 행의 최댓값은 6이며 열 인덱스는 2입니다.

같은 최댓값 처리와 반환된 인덱스 사용하기

최댓값이 여러 번 나타나면 numpy.argmax()는 검색 순서에서 처음 일치하는 위치를 반환합니다. axis를 지정한 경우 이 규칙은 각 슬라이스에 독립적으로 적용됩니다. 다음 1차원 예제에서는 반환된 위치와 그 위치에서 찾은 값을 확인할 수 있습니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

a = np.array([2, 6, 1, 6])
index = np.argmax(a)
print(index)
print(a[index])
1
6

두 최댓값은 모두 6이지만, 인덱스 1이 인덱스 3보다 앞에 있습니다. 다차원 배열을 축 지정 없이 검색할 때 ‘첫 번째’는 평탄화된 순서를 기준으로 합니다. 축을 지정하면 각 슬라이스 안의 순서를 기준으로 합니다.

결과를 out에 쓰기

결과를 기존 배열에 기록하려면 out을 사용하세요. 배열의 모양은 결과와 맞아야 합니다. 스칼라 결과에는 스칼라 모양의 배열을 사용할 수 있고, 축을 지정한 검색에는 결과 인덱스 배열과 같은 모양의 배열이 필요합니다. 인덱스를 표현할 수 있는 정수 자료형을 선택하세요. 함수 호출은 out에 기록한 것과 같은 결과도 반환합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

a = np.array([[2, 1, 6],
              [7, 4, 5]])
result = np.empty((), dtype=np.intp)
np.argmax(a, out=result)
print(result)
3

이 기본 검색의 결과는 스칼라 모양이므로 result는 0차원 배열입니다. 축을 지정한다면 결과 인덱스 배열의 모양에 맞춰 out을 할당하세요.