해결 방법: 런타임 경고: 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: 피연산자를 모양과 함께 브로드캐스트할 수 없습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다