Überlauf in der Funktion numpy.exp() in Python

Vaibhav Vaibhav 30 März 2022
Ü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 offizielle NumPy-Dokumentation hier.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.