HOWTO · Python

Die Eulersche Zahl in Python verwenden

Verwenden Sie math.e, math.exp() und numpy.exp() korrekt für die Eulersche Zahl in Python.

Auf dieser Seite

Verwenden Sie math.e, wenn Sie den Gleitkommawert der Eulerschen Zahl benötigen, math.exp(x), wenn Sie e mit einem einzelnen skalaren Exponenten potenzieren möchten, und numpy.exp(values), wenn diese Berechnung für jedes Element eines Arrays erforderlich ist. Das Modul math gehört zur Python-Standardbibliothek; NumPy ist für Array-Berechnungen eine optionale Abhängigkeit. Die Auswahl richtet sich nach Eingabeform und Zweck, nicht nach einer allgemeingültigen Geschwindigkeitsrangfolge.

Die Eulersche Zahl, meist als e geschrieben, ist die Basis der natürlichen Logarithmen. Python speichert sie als binären Gleitkommawert. Daher kann die Formatierung der Ausgabe die Darstellung ändern, ohne den Wert zu verändern, der in späteren Berechnungen verwendet wird.

math.e lesen, wenn Sie die Konstante benötigen

Importieren Sie e aus math, um die Konstante direkt auszulesen. Das ist für Beschriftungen, Formeln oder Berechnungen nützlich, die ausdrücklich den Basiswert benötigen. Die Ausgabe entspricht der normalen Darstellung eines Python-Floats in der getesteten Laufzeit.

from math import e

print(e)
2.718281828459045

Verwenden Sie die Formatierung nur an der Ausgabeschnittstelle. f"{e:.5f}" zeigt beispielsweise 2.71828 an, macht den gespeicherten Float aber nicht genauer. Behalten Sie während der Berechnung den unformatierten Wert und runden Sie erst, wenn Leser, Datei oder Benutzeroberfläche eine bestimmte Anzahl von Nachkommastellen benötigt.

math.exp() für einen skalaren Exponenten verwenden

Für ein skalares x berechnet math.exp(x) die Potenz von e mit dem Exponenten x. Die Operation ist damit eindeutig formuliert; laut Python-Dokumentation ist sie im Allgemeinen genauer als math.e ** x. math.expm1(x) ist die passende Funktion für den Ausdruck exp(x) - 1 und verhindert den Verlust signifikanter Stellen, wenn x sehr nahe bei null liegt.

import math

print(math.exp(3))
print(math.expm1(1e-16))
20.085536923187668
1e-16

Die erste Zeile berechnet e hoch drei. Die zweite zeigt das kleine Ergebnis von expm1; beim Abziehen von 1 von math.exp(1e-16) können Informationen bereits vor Abschluss der Subtraktion weggerundet werden.

math.exp() ist durch den Wertebereich von Pythons Float begrenzt. Ein hinreichend großer endlicher Exponent löst OverflowError aus. Behandeln Sie diese Grenze, wenn Eingaben nicht beschränkt sind, statt für jeden Exponenten ein darstellbares Ergebnis anzunehmen.

import math

try:
    math.exp(1000)
except OverflowError as error:
    print(type(error).__name__)
OverflowError

Wenn ein Überlauf in einer Anwendung erwartet wird, prüfen Sie den Eingabebereich, ändern Sie die mathematische Darstellung oder verwenden Sie ein für die Domäne geeignetes numerisches Verfahren. Das Abfangen der Ausnahme ist sinnvoll, wenn es zum vorgesehenen Programmverhalten gehört, darf aber keinen unerwarteten Eingabefehler verbergen.

numpy.exp() für Arraywerte verwenden

numpy.exp() ist eine elementweise Universal-Funktion. Übergeben Sie ihr eine arrayähnliche Sammlung, wenn jeder Exponent ein eigenes Ergebnis benötigt. Installieren Sie NumPy zuerst mit dem üblichen Abhängigkeitswerkzeug Ihres Projekts, falls es noch fehlt; das Standardbibliotheksmodul math bietet keine Array-Operationen.

import numpy as np

exponents = np.array([0.0, 1.0, 2.0])
print(np.exp(exponents))
[1.         2.71828183 7.3890561 ]

Das zurückgegebene Array hat dieselbe Form wie die Eingabe und enthält e hoch jedem einzelnen Element. Verwenden Sie math.exp() für einen Skalar und numpy.exp(), wenn Array-Semantik benötigt wird. NumPy akzeptiert zwar auch einen Skalar, aber für eine einzige skalare Berechnung ist der Import unnötig.

Die Methode nach der Eingabe auswählen

Lesen Sie die Konstante mit math.e, berechnen Sie einen einzelnen skalaren Exponenten mit math.exp() und verwenden Sie numpy.exp() für elementweise Array-Berechnungen. Wenn das Ergebnis nahe null exp(x) - 1 lautet, verwenden Sie math.expm1(). Alle diese APIs arbeiten mit endlichen Gleitkommawerten: Die Formatierung beeinflusst die Anzeige, und sehr große Exponentialwerte passen möglicherweise nicht in einen Float. Einzelheiten finden Sie in der offiziellen Python-math-Dokumentation und der NumPy-exp-Dokumentation.