Python에서 NaN(Not a Number)을 0으로, 무한대(infinity)를 큰 유한 숫자로 대체하려면 NumPy의 numpy.nan_to_num() 메서드를 사용합니다. 이 메서드는 비유한(non-finite) 값들이 모두 대체된 배열을 반환하며, copy 매개변수가 False로 설정된 경우 원본 배열 자체를 반환할 수도 있습니다.
numpy.nan_to_num()의 주요 매개변수
- 1번째 매개변수(x): 처리할 입력 데이터입니다.
- 2번째 매개변수(copy): x의 복사본을 생성할지(True) 또는 원본을 직접 수정할지(False)를 결정합니다. 제자리(in-place) 연산은 배열로 캐스팅 시 복사본이 필요하지 않은 경우에만 수행됩니다. 기본값은 True입니다.
- 3번째 매개변수(nan): NaN 값을 대체할 값입니다. 값을 지정하지 않으면 NaN은 0.0으로 대체됩니다.
- 4번째 매개변수(posinf): 양의 무한대(+inf)를 대체할 값입니다. 값을 지정하지 않으면 매우 큰 유한 숫자로 대체됩니다.
- 5번째 매개변수(neginf): 음의 무한대(-inf)를 대체할 값입니다. 값을 지정하지 않으면 매우 작은(음수) 유한 숫자로 대체됩니다.
구현 단계
1단계: 필요한 라이브러리 임포트
import numpy as np
2단계: array() 메서드로 NumPy 배열 생성
arr = np.array([np.inf, -np.inf, np.nan, -128, 128])
3단계: 배열 출력하기
print("Our Array...\n",arr)4단계: 배열의 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)5단계: 배열의 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)6단계: 배열의 형태(shape) 확인
print("\nShape of our Array object...\n",arr.shape)7단계: nan_to_num() 메서드 적용
NaN을 0으로, 무한대를 큰 유한 숫자로 대체하려면 다음과 같이 np.nan_to_num() 메서드를 호출합니다.
print("\nResult...\n",np.nan_to_num(arr))전체 예제 코드
import numpy as np
# array() 메서드를 사용하여 NumPy 배열 생성
arr = np.array([np.inf, -np.inf, np.nan, -128, 128])
# 배열 출력
print("Our Array...\n",arr)
# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)
# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)
# 형태(shape) 확인
print("\nShape of our Array object...\n",arr.shape)
# nan_to_num() 메서드로 NaN은 0으로, 무한대는 큰 유한 숫자로 대체
# copy=False인 경우 원본 배열 자체가 반환될 수 있음
print("\nResult...\n",np.nan_to_num(arr))실행 결과
Our Array... [ inf -inf nan -128. 128.] Dimensions of our Array... 1 Datatype of our Array object... float64 Shape of our Array object... (5,) Result... [ 1.79769313e+308 -1.79769313e+308 0.00000000e+000 -1.28000000e+002 1.28000000e+002]
결과 해석
실행 결과를 보면 다음과 같이 변환된 것을 확인할 수 있습니다.
- 양의 무한대(np.inf) → 약 1.79769313e+308 (float64 타입이 표현할 수 있는 최댓값)
- 음의 무한대(-np.inf) → 약 -1.79769313e+308 (최솟값)
- NaN → 0.00000000e+000 (기본값 0.0)
- -128과 128 → 그대로 유지됨
이처럼 numpy.nan_to_num() 메서드를 활용하면 수치 계산 중 발생할 수 있는 비유한 값들을 안전하게 처리하여, 후속 연산에서 오류나 예상치 못한 결과가 발생하는 것을 방지할 수 있습니다.