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

Python에서 NaN을 0으로, 무한대를 큰 유한 숫자로 변환하는 방법

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() 메서드를 활용하면 수치 계산 중 발생할 수 있는 비유한 값들을 안전하게 처리하여, 후속 연산에서 오류나 예상치 못한 결과가 발생하는 것을 방지할 수 있습니다.