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

Python NumPy nan_to_num()으로 무한대를 큰 유한 숫자로 변환하고 복소수 배열의 NaN 값 채우기

Python에서 NaN(Not a Number)을 0으로, 무한대(infinity)를 큰 유한 숫자로 대체하려면 numpy.nan_to_num() 메서드를 사용하면 됩니다. 이 메서드는 입력 배열 x에서 비유한(non-finite) 값들을 대체한 결과를 반환하며, copy=False로 설정한 경우 x 자체가 반환될 수도 있습니다.

nan_to_num()의 주요 매개변수

첫 번째 매개변수(x): 처리할 입력 데이터입니다.

두 번째 매개변수(copy): x의 복사본을 생성할지(True) 아니면 제자리(in-place)에서 값을 교체할지(False)를 결정합니다. 제자리 연산은 배열로 캐스팅할 때 복사본이 필요하지 않은 경우에만 수행됩니다. 기본값은 True입니다.

세 번째 매개변수(nan): NaN 값을 채우는 데 사용할 값입니다. 값을 전달하지 않으면 NaN은 기본적으로 0.0으로 대체됩니다.

네 번째 매개변수(posinf): 양의 무한대(+inf) 값을 채우는 데 사용할 값입니다. 값을 전달하지 않으면 매우 큰 유한 숫자로 대체됩니다.

다섯 번째 매개변수(neginf): 음의 무한대(-inf) 값을 채우는 데 사용할 값입니다. 값을 전달하지 않으면 매우 작은(음의) 숫자로 대체됩니다.

단계별 구현 방법

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

import numpy as np

array() 메서드를 사용해 복소수와 NaN을 포함하는 numpy 배열을 생성합니다.

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)

이제 numpy.nan_to_num() 메서드를 사용해 NaN을 지정한 값으로, 무한대를 큰 유한 숫자로 대체합니다.

print("\nResult...\n",np.nan_to_num(arr, nan = 11111))

전체 예제 코드

import numpy as np

# array() 메서드를 사용해 numpy 배열 생성
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을 11111로 대체하고 무한대는 큰 유한 숫자로 변환
print("\nResult...\n",np.nan_to_num(arr, nan = 11111))

실행 결과

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+11111.j 1.11110000e+004 +0.j]

결과 해석

위 예제에서 원래 배열은 complex128 타입의 1차원 배열로, 양의 무한대(inf)와 NaN이 포함된 복소수 요소를 가지고 있습니다. nan_to_num() 메서드에 nan=11111 옵션을 적용한 결과는 다음과 같습니다.

  • 실수부의 양의 무한대(inf)는 float64가 표현할 수 있는 최댓값인 약 1.79769313e+308로 대체되었습니다.
  • NaN 값은 지정한 11111로 채워졌습니다.

이처럼 nan_to_num()은 수치 계산 과정에서 발생할 수 있는 비유한 값들을 안전하게 처리해야 할 때 매우 유용합니다. 특히 머신러닝 전처리나 대규모 수치 연산에서 오류를 방지하는 데 널리 활용됩니다.