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