Python에서 numpy.nan_to_num() 메서드를 사용하면 배열에 포함된 NaN(Not a Number) 값을 0으로, 무한대(infinity) 값을 큰 유한 숫자로 손쉽게 대체할 수 있습니다.
이 메서드는 비유한(non-finite) 값들이 모두 대체된 배열을 반환합니다. 만약 copy 매개변수를 False로 설정하면 원본 배열 자체를 수정하여 반환할 수도 있습니다.
numpy.nan_to_num()의 주요 매개변수
각 매개변수의 역할은 다음과 같습니다.
- 1번째 매개변수(x): 대체 작업을 수행할 입력 데이터입니다.
- 2번째 매개변수(copy): True이면 x의 복사본을 생성하고, False이면 제자리(in-place)에서 값을 대체합니다. 단, 제자리 연산은 배열로 캐스팅할 때 복사본이 필요하지 않은 경우에만 적용됩니다. 기본값은 True입니다.
- 3번째 매개변수(nan): NaN 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 NaN은 0.0으로 대체됩니다.
- 4번째 매개변수(posinf): 양의 무한대(+inf) 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 매우 큰 유한 숫자로 대체됩니다.
- 5번째 매개변수(neginf): 음의 무한대(-inf) 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 매우 작은(음수) 유한 숫자로 대체됩니다.
단계별 구현 방법
1단계: 필요한 라이브러리 가져오기
먼저 NumPy 라이브러리를 임포트합니다.
import numpy as np
2단계: 복소수 배열 생성하기
array() 메서드를 사용해 양의 무한대와 NaN을 포함하는 복소수 배열을 생성합니다.
arr = np.array([complex(np.inf, np.nan), np.nan])
3단계: 배열 정보 확인하기
생성된 배열과 함께 차원(ndim), 데이터 타입(dtype), 형태(shape)를 확인합니다.
print("Our Array...\n",arr)
print("\nDimensions of our Array...\n",arr.ndim)
print("\nDatatype of our Array object...\n",arr.dtype)
print("\nShape of our Array object...\n",arr.shape)4단계: nan_to_num()으로 값 대체하기
numpy.nan_to_num() 메서드를 호출하면 NaN은 0으로, 무한대는 큰 유한 숫자로 변환된 결과를 확인할 수 있습니다.
print("\nResult...\n",np.nan_to_num(arr))전체 예제 코드
import numpy as np
# array() 메서드로 복소수 배열 생성
arr = np.array([complex(np.inf, np.nan), np.nan])
# 배열 출력
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, 무한대 → 큰 유한 숫자 대체
print("\nResult...\n",np.nan_to_num(arr))
실행 결과
Our Array...
[inf+nanj nan +0.j]
Dimensions of our Array...
1
Datatype of our Array object...
complex128
Shape of our Array object...
(2,)
Result...
[1.79769313e+308+0.j 0.00000000e+000+0.j]
실행 결과를 보면, 실수부의 양의 무한대(inf)는 부동 소수점 최댓값인 약 1.79769313e+308로 대체되었고, 허수부와 두 번째 요소의 NaN은 모두 0으로 변환된 것을 확인할 수 있습니다.