Überlauf in der Funktion numpy.exp() in Python
NumPy
ist ein Python-Paket, das reich an Hilfsmitteln ist, um mit großen mehrdimensionalen Matrizen und Arrays herumzuspielen und sowohl komplexe als auch einfache mathematische Operationen an ihnen durchzuführen.
Diese Dienstprogramme reagieren dynamisch auf die Eingaben und sind hochoptimiert und schnell. Das NumPy
-Paket hat eine Funktion exp()
, die die Exponentialfunktion aller Elemente eines eingegebenen numpy-Arrays berechnet.
Mit anderen Worten, es berechnet ex, x
ist jede Zahl des eingegebenen numpy-Arrays und e
ist die Eulersche Zahl, die ungefähr gleich 2.71828
ist.
Da diese Berechnung zu einer großen Zahl führen kann, können einige Datentypen solche großen Werte nicht verarbeiten, und daher gibt diese Funktion inf
und einen Fehler anstelle eines gültigen Gleitkommawerts zurück.
Beispielsweise gibt diese Funktion 8.21840746e+307
für numpy.exp(709)
zurück, aber runtimeWarning: overflow found in exp inf
für numpy.exp(710)
.
In diesem Artikel erfahren Sie, wie Sie dieses Problem beheben können.
Behebung des Überlaufs in der Funktion numpy.exp()
in Python NumPy
Wir müssen Werte in einem Datentyp speichern, der solche großen Werte aufnehmen kann, um dieses Problem zu beheben.
Zum Beispiel kann np.float128
viel grössere Zahlen enthalten als float64
und float32
. Alles, was wir tun müssen, ist, jeden Wert eines Arrays in einen größeren Datentyp umzuwandeln und ihn in einem numpy-Array zu speichern.
Der folgende Python-Code veranschaulicht dies.
import numpy as np
a = np.array([1223, 2563, 3266, 709, 710], dtype=np.float128)
print(np.exp(a))
Ausgabe:
[1.38723925e+0531 1.24956001e+1113 2.54552810e+1418 8.21840746e+0307
2.23399477e+0308]
Obwohl der obige Python-Code nahtlos und ohne Probleme ausgeführt wird, sind wir dennoch anfällig für denselben Fehler.
Der Grund dafür ist ziemlich einfach; sogar np.float128
hat einen Schwellenwert für Zahlen, die es aufnehmen kann. Jeder Datentyp hat eine Obergrenze, und wenn diese Obergrenze überschritten wird, werden die Dinge fehlerhaft, und Programme beginnen mit Überlauffehlern.
Um den oben genannten Punkt zu verstehen, beziehen Sie sich auf den folgenden Python-Code. Auch wenn np.float128
unser Problem im letzten Python-Code-Snippet gelöst hat, würde es für noch grössere Werte nicht funktionieren.
import numpy as np
a = np.array([1223324, 25636563, 32342266, 235350239, 27516346320], dtype=np.float128)
print(np.exp(a))
Ausgabe:
<string>:4: RuntimeWarning: overflow encountered in exp
[inf inf inf inf inf]
Die Funktion exp()
gibt für jeden Wert im numpy-Array eine Unendlichkeit zurück.
Um mehr über die Funktion
numpy.exp()
zu erfahren, lesen Sie die offizielleNumPy
-Dokumentation hier.