Python에서 배열에 포함된 NaN을 0으로 대체하고, 무한대 값을 크기가 큰 유한 수로 바꾸려면 numpy.nan_to_num() 메서드를 사용하면 됩니다. 이 메서드는 비유한(non-finite) 값들이 모두 대체된 배열을 반환하며, copy=False로 설정한 경우 원본 배열 자체를 반환할 수도 있습니다.
numpy.nan_to_num()의 주요 매개변수
nan_to_num() 메서드는 다음과 같은 매개변수를 가집니다.
- 1번째 매개변수(x) — 입력 데이터입니다.
- 2번째 매개변수(copy) — 원본 배열의 복사본을 생성할지(True), 아니면 제자리(in-place)에서 값을 대체할지(False)를 결정합니다. 제자리 연산은 배열로 캐스팅할 때 복사본이 필요 없는 경우에만 수행됩니다. 기본값은 True입니다.
- 3번째 매개변수(nan) — NaN 값을 채우는 데 사용할 값입니다. 값을 지정하지 않으면 NaN은 기본적으로 0.0으로 대체됩니다.
- 4번째 매개변수(posinf) — 양의 무한대(+inf)를 채우는 데 사용할 값입니다. 값을 지정하지 않으면 매우 큰 양수로 대체됩니다.
- 5번째 매개변수(neginf) — 음의 무한대(-inf)를 채우는 데 사용할 값입니다. 값을 지정하지 않으면 매우 작은(음의) 수로 대체됩니다.
처리 단계
먼저 필요한 라이브러리를 임포트합니다.
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)이제 numpy.nan_to_num() 메서드를 사용해 NaN을 0으로, 음의 무한대를 지정한 값으로 대체합니다.
print("\nResult...\n",np.nan_to_num(arr, neginf = 22222))전체 예제 코드
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으로, 음의 무한대는 22222로 대체
print("\nResult...\n",np.nan_to_num(arr, neginf = 22222))실행 결과
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 2.22220000e+004 0.00000000e+000 -1.28000000e+002 1.28000000e+002]
실행 결과를 보면 양의 무한대(inf)는 float64 타입이 표현할 수 있는 최댓값인 약 1.797e+308로, 음의 무한대(-inf)는 지정한 값인 22222로, 그리고 NaN은 0.0으로 각각 성공적으로 대체된 것을 확인할 수 있습니다.