파이썬 넘파이 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 설정의 원리를 적용할 수 있습니다.
'Python > Numpy' 카테고리의 다른 글
[Numpy] 파이썬 내적, 행렬곱 함수 np.dot() 사용법 총정리 (3) | 2021.12.28 |
---|---|
[Numpy] 최대값, 최소값 함수 np.max vs np.maximum 차이 (np.min과 np.minimum) (0) | 2021.12.23 |
[Numpy] 넘파이 랜덤 추출 함수 정리 : rand, random, randn, randint, choice, seed (0) | 2021.12.13 |