Jak naprawić: napotkano nieprawidłową wartość w true_divide
Jednym z ostrzeżeń, które możesz napotkać podczas korzystania z NumPy, jest:
RuntimeWarning : invalid value encountered in true_divide
To ostrzeżenie pojawia się, gdy próbujesz podzielić przez nieprawidłową wartość (taką jak NaN, Inf itp.) w tablicy NumPy.
Należy zauważyć, że jest to tylko ostrzeżenie i NumPy po prostu zwróci wartość nan podczas próby podzielenia przez nieprawidłową wartość.
Poniższy przykład pokazuje, jak w praktyce zareagować na to ostrzeżenie.
Jak odtworzyć błąd
Załóżmy, że próbujemy podzielić wartości jednej tablicy NumPy przez wartości innej tablicy NumPy:
import numpy as np #define NumPy arrays x = np. array ([4, 5, 5, 7, 0]) y = np. array ([2, 4, 6, 7, 0]) #divide the values in x by the values in y n.p. divide (x,y) array([2., 1.25, 0.8333, 1., no]) RuntimeWarning : invalid value encountered in true_divide
Należy zauważyć, że NumPy dzieli każdą wartość x przez odpowiednią wartość y, ale generowany jest komunikat RuntimeWarning .
Dzieje się tak, ponieważ ostatnią wykonaną operacją dzielenia było podzielenie zera przez zero, co dało wartość nan .
Jak zareagować na to ostrzeżenie
Jak wspomniano wcześniej, to RuntimeWarning jest jedynie ostrzeżeniem i nie uniemożliwia wykonania kodu.
Jeśli jednak chcesz ukryć tego typu ostrzeżenie, możesz użyć następującej składni:
n.p. seterr (invalid=' ignore ')
To mówi NumPy, aby ukrył wszelkie ostrzeżenia zawierające „nieprawidłowy” komunikat.
Jeśli więc uruchomimy kod ponownie, nie otrzymamy żadnych ostrzeżeń:
import numpy as np #define NumPy arrays x = np. array ([4, 5, 5, 7, 0]) y = np. array ([2, 4, 6, 7, 0]) #divide the values in x by the values in y n.p. divide (x,y) array([2., 1.25, 0.8333, 1., no])
Wartość nan jest nadal zwracana dla ostatniej wartości wyjściowej, ale tym razem nie jest wyświetlany żaden komunikat ostrzegawczy.
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