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

파이썬 NumPy nanmin() 함수로 NaN과 양의 무한대가 포함된 배열의 최솟값 구하기

배열에서 최솟값을 구할 때 NaN(Not a Number) 값을 무시하고 계산하려면 파이썬 NumPy의 numpy.nanmin() 메서드를 사용하면 됩니다. 이 메서드는 지정한 축(axis)이 제거된 형태로 결과를 반환하며, 입력 배열 a와 동일한 dtype을 유지합니다. 만약 a가 0차원 배열이거나 axis가 None이면 ndarray 스칼라 값이 반환됩니다.

특히 배열에 양의 무한대(np.inf)와 같은 특수 값이 포함되어 있어도 nanmin()은 정상적으로 최솟값을 계산할 수 있습니다. 다만 모든 요소가 NaN인 슬라이스에 대해 경고(RuntimeWarning)가 발생하고 NaN을 반환한다는 점은 참고하세요.

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

  • a: 최솟값을 구하고자 하는 숫자를 담고 있는 배열입니다. 배열이 아닌 경우 변환을 시도합니다.
  • axis: 최솟값을 계산할 축 또는 축들의 집합입니다. 기본값은 None이며, 이 경우 평탄화(flattened)된 전체 배열에 대해 최솟값을 계산합니다.
  • out: 결과를 저장할 대체 출력 배열입니다. 기본값은 None이며, 값을 지정하면 예상 출력과 동일한 shape을 가져야 하고 필요 시 타입이 캐스팅됩니다.
  • keepdims: True로 설정하면 축소된 축이 크기 1의 차원으로 결과에 남습니다. 이 옵션을 사용하면 원본 배열 a에 대해 브로드캐스팅이 올바르게 수행됩니다. 기본값이 아닌 값이 지정되면 keepdims는 ndarray 하위 클래스의 max 메서드에 전달되며, 하위 클래스가 keepdims를 구현하지 않으면 예외가 발생합니다.
  • initial: 출력 요소의 최댓값입니다. 빈 슬라이스(empty slice)에 대한 연산을 허용하기 위해 반드시 존재해야 합니다.

구현 단계

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

import numpy as np

array() 메서드를 사용해 NumPy 배열을 생성합니다. 여기에는 int 타입 요소와 함께 NaN 및 양의 무한대(inf)도 포함했습니다.

arr = np.array([[25, 50, 75], [90, np.nan, np.inf]])

배열을 화면에 표시합니다.

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

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

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

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

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

NaN을 무시하고 배열의 최솟값을 반환하려면 numpy.nanmin() 메서드를 사용합니다.

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

전체 예제 코드

import numpy as np

# array() 메서드로 NumPy 배열 생성
# int 타입 요소와 함께 nan과 inf(양의 무한대) 포함
arr = np.array([[25, 50, 75], [90, np.nan, np.inf]])

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

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

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

# NaN을 무시한 최솟값 계산
print("\nResult (nanmin)...\n",np.nanmin(arr))

실행 결과

Our Array...
[[25. 50. 75.]
 [90. nan inf]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Result (nanmin)...
25.0

위 실행 결과를 보면, 배열에 NaN과 inf가 포함되어 있음에도 불구하고 nanmin() 메서드는 NaN을 정확히 무시하고 나머지 유효한 값들 중 가장 작은 값인 25.0을 반환하는 것을 확인할 수 있습니다. 참고로 일반적인 np.min() 함수를 사용하면 NaN이 전파되어 결과가 NaN이 되므로, 결측치가 포함된 데이터 분석 시 nanmin()이 유용하게 활용됩니다.