본문 바로가기
Python/numpy

Numpy FloatingPointError: invalid value encountered in divide 오류 해결하기

by PySun 2024. 10. 23.
반응형

소개

Numpy에서 작업하는 과정에서 종종 마주하게 되는 'FloatingPointError: invalid value encountered in divide' 오류는 주로 0으로 나누는 경우 발생합니다. 이 문제는 데이터 준비 과정에서 발생할 수 있는 여러가지 이유들로 인해 쉽게 발생할 수 있습니다. 이 블로그 글에서는 이 오류의 발생 원인과 함께 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

아래는 'FloatingPointError: invalid value encountered in divide' 오류가 발생할 수 있는 간단한 예시 코드입니다.

import numpy as np

# 두 배열 생성
a = np.array([1, 2, 0])
b = np.array([0, 2, 3])

# 나누기 연산 수행
result = np.divide(a, b)
print(result)

에러 해결 방법

1. 제로 나누기 방지

가장 기본적인 해결 방법은 나누기 연산을 수행하기 전에 제로 값을 체크하고, 이를 처리하는 것입니다. 아래는 이를 처리하는 코드입니다.

import numpy as np

a = np.array([1, 2, 0])
b = np.array([0, 2, 3])

# b 배열의 값이 0이 아닌 경우에만 나누기 수행
result = np.divide(a, b, out=np.zeros_like(a, dtype=float), where=b!=0)
print(result)

2. numpy.seterr() 사용하기

Numpy의 에러 핸들링 설정을 통해 경고를 받을 수 있습니다. 예를 들어, 나누기 0이 발생할 때 경고 메시지를 출력하는 방법이 있습니다.

import numpy as np

# 에러 핸들링 설정
np.seterr(divide='warn', invalid='warn')

a = np.array([1, 2, 0])
b = np.array([0, 2, 3])

# 나누기 연산 수행
result = np.divide(a, b)
print(result)

3. NaN 값을 처리하기

위의 방법으로도 NaN 값이 발생할 수 있습니다. NaN 값을 처리하기 위해서는 numpy의 np.nan_to_num() 함수를 사용할 수 있습니다.

import numpy as np

a = np.array([1, 2, 0])
b = np.array([0, 2, 3])

result = np.divide(a, b)
result = np.nan_to_num(result, nan=0.0)  # NaN 값을 0으로 대체
print(result)

마무리

이번 블로그 글에서는 Numpy에서 발생하는 'FloatingPointError: invalid value encountered in divide' 오류에 대해 알아보고, 이를 해결하기 위한 다양한 방법을 안내해 드렸습니다. 제로 나누기 체크뿐만 아니라 에러 핸들링과 NaN 값을 처리하는 방법을 통해 오류를 사전에 예방할 수 있습니다. 여러분의 Numpy 작업이 더욱 수월해지길 바랍니다!

반응형