Come risolvere il problema: runtimewarning: rilevato overflow nell'exp
Un avviso che potresti incontrare in Python è:
RuntimeWarning: overflow encountered in exp
Questo avviso si verifica quando si utilizza la funzione exp NumPy, ma si utilizza un valore troppo grande per essere gestito.
È importante notare che questo è solo un avviso e NumPy eseguirà comunque il calcolo richiesto, ma fornisce l’avviso per impostazione predefinita.
Quando incontri questo avviso, hai due opzioni:
1. Ignoralo.
2. Rimuovere completamente l’avviso.
L’esempio seguente mostra come rispondere concretamente a questo avviso.
Come riprodurre l’avviso
Supponiamo di eseguire il seguente calcolo in Python:
import numpy as np #perform some calculation print (1/(1+np. exp (1140))) 0.0 /srv/conda/envs/notebook/lib/python3.7/site-packages/ipykernel_launcher.py:3: RuntimeWarning: overflow encountered in exp
Tieni presente che NumPy esegue il calcolo (il risultato è 0.0) ma stampa comunque RuntimeWarning .
Questo avviso viene stampato perché il valore np.exp(1140) rappresenta e 1140 , che è un numero enorme .
Fondamentalmente abbiamo chiesto a NumPy di eseguire il seguente calcolo:
- 1 / (1 + numero massiccio)
Questo può essere ridotto a:
- 1/numero massiccio
È effettivamente 0, motivo per cui NumPy ha calcolato il risultato come 0.0 .
Come rimuovere l’avviso
Se vogliamo, possiamo usare il pacchetto wars per sopprimere gli avvisi come segue:
import numpy as np import warnings #remove warnings warnings. filterwarnings (' ignore ') #perform some calculation print (1/(1+np. exp (1140))) 0.0
Tieni presente che NumPy esegue il calcolo e non visualizza un RuntimeWarning.
Nota : in generale, gli avvisi possono essere utili per identificare parti di codice la cui esecuzione richiede molto tempo. Quindi sii molto selettivo quando decidi di rimuovere gli avvisi.
Risorse addizionali
I seguenti tutorial spiegano come correggere altri errori comuni in Python:
Come correggere l’errore chiave nei Panda
Come risolvere il problema: ValueError: impossibile convertire float NaN in int
Come risolvere il problema: ValueError: non è stato possibile trasmettere gli operandi con le forme