Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy nanmin() – 축 0을 따라 NaN을 무시한 배열의 최솟값 구하기

Python에서 배열의 최솟값을 구하거나 NaN(Not a Number) 값을 제외한 최솟값을 계산할 때는 numpy.nanmin() 메서드를 사용합니다. 이 메서드는 지정된 축(axis)이 제거된 형태로, 입력 배열 a와 동일한 모양의 배열을 반환합니다. 만약 a가 0차원 배열이거나 axis가 None이면 스칼라(ndarray scalar)를 반환하며, 반환되는 데이터 타입(dtype)은 항상 원본 배열과 동일합니다.

numpy.nanmin()의 주요 매개변수

첫 번째 매개변수 a: 최솟값을 구하고자 하는 숫자들을 담고 있는 배열입니다. 배열이 아닌 값이 전달되면 자동으로 배열로 변환을 시도합니다.

두 번째 매개변수 axis: 최솟값을 계산할 축 또는 축들을 지정합니다. 기본값은 None이며, 이 경우 평탄화(flattened)된 배열 전체에 대해 최솟값을 계산합니다.

세 번째 매개변수 out: 결과를 저장할 대체 출력 배열입니다. 기본값은 None이며, 값을 지정할 경우 예상되는 출력과 같은 모양이어야 하고 필요하다면 타입이 자동으로 변환(cast)됩니다.

네 번째 매개변수 keepdims: True로 설정하면 축소된 축들이 크기 1인 차원으로 결과에 그대로 유지됩니다. 이 옵션을 사용하면 원본 배열 a에 대해 브로드캐스팅이 올바르게 수행됩니다. 기본값이 아닌 값이 지정되면 keepdims는 ndarray 하위 클래스의 메서드에 전달되며, 해당 하위 클래스가 keepdims를 구현하지 않으면 예외가 발생합니다.

다섯 번째 매개변수 initial: 출력 요소의 최대 시작값입니다. 빈 슬라이스(empty slice)에 대한 연산을 수행하려면 반드시 지정해야 합니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다 −

import numpy as np

array() 메서드를 사용해 넘파이 배열을 생성합니다. 정수형 요소에 NaN 값도 함께 포함시켰습니다 −

arr = np.array([[10, 20, 30], [40, np.nan, 60]])

생성된 배열을 화면에 출력합니다 −

print("Our Array...\n",arr)

배열의 차원을 확인합니다 −

print("\nDimensions of our Array...\n",arr.ndim)

배열의 데이터 타입을 확인합니다 −

print("\nDatatype of our Array object...\n",arr.dtype)

numpy.nanmin() 메서드를 사용해 NaN을 무시한 최솟값을 계산합니다 −

print("\nResult (nanmin)...\n",np.nanmin(arr, axis = 0))

전체 예제 코드

import numpy as np

# array() 메서드로 넘파이 배열 생성
# 정수형 요소에 NaN도 포함
arr = np.array([[10, 20, 30], [40, np.nan, 60]])

# 배열 출력
print("Our Array...\n",arr)

# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)

# numpy.nanmin() 메서드로 NaN을 무시한 최솟값 계산
print("\nResult (nanmin)...\n",np.nanmin(arr, axis = 0))

실행 결과

Our Array...
[[10. 20. 30.]
[40. nan 60.]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Result (nanmin)...
[10. 20. 30.]

결과 해석

axis=0은 열 방향을 의미하므로, 각 열별로 최솟값이 계산되었습니다. 첫 번째 열에서는 10과 40 중 작은 값인 10, 두 번째 열에서는 20과 NaN이 비교되지만 NaN이 무시되어 20, 세 번째 열에서는 30과 60 중 작은 값인 30이 반환된 것을 확인할 수 있습니다.

참고로 슬라이스 내 모든 요소가 NaN일 경우에는 'All-NaN slice encountered'라는 RuntimeWarning이 발생하며 결과로 NaN이 반환됩니다. 따라서 실무에서는 결측치 처리 로직과 함께 사용하는 것이 좋습니다.