Jak naprawić: runtimewarning: napotkano nieprawidłową wartość w double_scalars


Błąd, który możesz napotkać w Pythonie to:

 runtimewarning: invalid value encountered in double_scalars

Ten błąd występuje, gdy próbujesz wykonać operację matematyczną na bardzo małych lub bardzo dużych liczbach, a Python po prostu generuje w rezultacie wartość NaN.

Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.

Jak odtworzyć błąd

Załóżmy, że próbujemy wykonać następującą operację matematyczną na dwóch tablicach 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

Otrzymujemy RuntimeWarning , ponieważ wynik w mianowniku jest bardzo bliski zeru.

Oznacza to, że odpowiedź na problem dzielenia będzie niezwykle duża i Python nie będzie w stanie obsłużyć tak dużej wartości.

Jak naprawić błąd

Zazwyczaj sposobem naprawienia tego typu błędu jest użycie specjalnej funkcji z innej biblioteki Pythona, która może obsługiwać w obliczeniach bardzo małe lub bardzo duże wartości.

W tym przypadku możemy skorzystać z funkcji logsumexp() z biblioteki SciPy:

 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

Należy pamiętać, że wynik jest bardzo duży, ale nie otrzymaliśmy żadnych błędów, ponieważ użyliśmy specjalnej funkcji matematycznej z biblioteki SciPy zaprojektowanej do obsługi tego typu liczb.

W wielu przypadkach warto poszukać w bibliotece SciPy specjalnych funkcji, które poradzą sobie z ekstremalnymi operacjami matematycznymi, ponieważ funkcje te są specjalnie zaprojektowane do obliczeń naukowych.

Uwaga : Pełną dokumentację online funkcji logsumexp() można znaleźć tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:

Jak naprawić błąd KeyError w Pandach
Jak naprawić: ValueError: Nie można przekonwertować float NaN na int
Jak naprawić: Błąd wartości: Nie można rozgłaszać argumentów z kształtami

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *