Python/Numpy

[Numpy] 파이썬 최대값, 최소값 위치 반환 np.argmax, np.argmin

jimmy_AI 2021. 12. 27. 17:36
반응형

파이썬 넘파이 argmax, argmin 함수

안녕하세요. 이번 포스팅에서는 파이썬 넘파이 라이브러리에서 제공하는

최대값, 최소값의 위치 인덱스를 반환하는 함수인

np.argmax와 np.argmin 함수에 대해서 간략하게 다루어보도록 하겠습니다.

 

np.argmax / np.argmin 함수 기본 사용법

np.argmax 함수는 함수 내에 array와 비슷한 형태(리스트 등 포함)의

input을 넣어주면 가장 큰 원소의 인덱스를 반환하는 형식입니다.

다만, 가장 큰 원소가 여러개 있는 경우 가장 앞의 인덱스를 반환합니다.

아래는 리스트 자료형을 예시로 np.argmax를 사용하는 예시입니다.

import numpy as np

a = [3, 2, 5, 4, 5]

np.argmax(a) # 2 출력

인덱스는 0번부터 시작함을 항상 유의해주세요.

위의 예시는 2, 4번 인덱스가 모두 5로 가장 크지만,

2번 인덱스가 더 앞에 등장하여 2라는 값을 반환합니다.

 

numpy array 자료형을 대상으로는 a.argmax()처럼 사용하는 것도 가능합니다.

# array 자료형
a = np.array([1.5, 2.7, 4.3, 2.2])

# 둘다 가능(2 반환)
np.argmax(a)
a.argmax()

위의 예시처럼 실수 자료형에도 마찬가지로 함수를 적용할 수 있습니다.

a.argmax()로 사용하는 경우에도 아래에서 설명할 axis 적용이 가능하오니

참고하시면 좋을 듯 합니다.

 

np.argmin 함수의 사용 방법은 np.argmax 함수와 완전히 동일하기에

추가적인 설명은 생략하도록 하겠습니다. 최소값의 인덱스 위치를 반환합니다.

반응형

np.argmax / np.argmin 2차원 배열 예제 : axis 설정

2차원 이상의 배열에서도 np.argmax나 np.argmin 함수를 적용할 수 있습니다.

기본 원리는 아래 그림처럼 요약이 가능합니다.

axis를 지정하지 않은 경우(axis = None), 모든 원소를 순서대로 1차원 array에

편 상태를 가정하고, argmax를 적용한 결과를 반환합니다.

 

반면, axis를 1로 설정(axis = 1)한 경우는 각 가로축 원소들끼리의 비교에서

최대값의 위치들을 순서대로 배열로 모아 반환한 결과를 보여주게 됩니다.

 

axis를 0으로 지정한 경우(axis = 0)일 때는 유사한 원리로 세로축 원소들끼리 비교하여

각 세로축 내부에서 argmax를 각각 적용한 결과를 나타냅니다.

 

실제 코드 예시는 다음과 같습니다.

# 2차원 array 예시
b = np.array([[4, 3, 2], [8, 5, 9], [7, 6, 1]])

np.argmax(b) # 5
np.argmax(b, axis = 1) # array([0, 2, 0])
np.argmax(b, axis = 0) # array([1, 2, 1])

np.array자료형인 경우 위의 예시와 마찬가지로 b.argmax꼴로 사용하는 것이

가능하며, axis를 -1로 시작하여 뒤쪽 축부터 인덱싱하는 것도 가능합니다.

2차원의 경우는 axis = -1은 1번축, axis = -2는 0번축을 나타내게 됩니다.

b = np.array([[4, 3, 2], [8, 5, 9], [7, 6, 1]])

# 뒤쪽 축부터 인덱싱
b.argmax(axis = -1) # array([0, 2, 0])
b.argmax(axis = -2) # array([1, 2, 1])

argmin 함수의 경우도 마찬가지로 axis 설정의 원리를 적용할 수 있습니다.