해결 방법: 런타임 경고: double_scalars에서 잘못된 값이 발견되었습니다.
Python에서 발생할 수 있는 오류는 다음과 같습니다.
runtimewarning: invalid value encountered in double_scalars
이 오류는 매우 작거나 매우 큰 숫자를 포함하는 수학 연산을 수행하려고 시도하고 Python이 결과로 NaN 값을 생성할 때 발생합니다.
다음 예에서는 실제로 이 오류를 수정하는 방법을 보여줍니다.
오류를 재현하는 방법
두 개의 NumPy 배열을 사용하여 다음과 같은 수학 연산을 수행한다고 가정해 보겠습니다.
import numpy as np #define two NumPy arrays array1 = np. array ([[1100, 1050]]) array2 = np. array ([[1200, 4000]]) #perform complex mathematical operation n.p. exp (-3*array1). sum () / np. exp (-3*array2). sum () RuntimeWarning: invalid value encountered in double_scalars
분모의 결과가 0에 매우 가깝기 때문에 RuntimeWarning을 받습니다.
이는 나눗셈 문제에 대한 답이 매우 커질 것이며 Python은 그렇게 큰 값을 처리할 수 없다는 것을 의미합니다.
오류를 수정하는 방법
일반적으로 이러한 유형의 오류를 수정하는 방법은 계산에서 매우 작거나 큰 값을 처리할 수 있는 다른 Python 라이브러리의 특수 함수를 사용하는 것입니다.
이 경우 SciPy 라이브러리의 logsumexp() 함수를 사용할 수 있습니다:
import numpy as np from scipy. special import logsumexp #define two NumPy arrays array1 = np. array ([[1100, 1050]]) array2 = np. array ([[1200, 4000]]) #perform complex mathematical operation n.p. exp (logsumexp(-3*array1) - logsumexp(-3*array2)) 2.7071782767869983e+195
결과는 매우 크지만 이러한 유형의 숫자를 처리하도록 설계된 SciPy 라이브러리의 특수 수학 함수를 사용했기 때문에 오류가 발생하지 않습니다.
대부분의 경우 극단적인 수학 연산을 처리할 수 있는 SciPy 라이브러리 의 특수 함수를 찾는 것이 좋습니다. 이러한 함수는 과학 컴퓨팅을 위해 특별히 설계되었기 때문입니다.
참고 : 여기에서 logsumexp() 함수에 대한 전체 온라인 설명서를 찾을 수 있습니다.
추가 리소스
다음 튜토리얼에서는 Python의 다른 일반적인 오류를 수정하는 방법을 설명합니다.
Pandas에서 KeyError를 수정하는 방법
해결 방법: ValueError: float NaN을 int로 변환할 수 없습니다.
해결 방법: ValueError: 피연산자를 모양과 함께 브로드캐스트할 수 없습니다.