HOWTO · Python
Berechnung der Inverse des Kosinus in Python
Wir können die Umkehrung des Kosinus in Python mit der Funktion acos() und der NumPy-Bibliothek berechnen
Auf dieser Seite
Der Arkuskosinus, auch inverser Kosinus genannt, ermittelt den Hauptwinkel, dessen Kosinus einem gegebenen Wert entspricht. Er ist die Umkehrfunktion des Kosinus und nicht sein Kehrwert (1 / cos(x)). Verwenden Sie in Python math.acos() für eine einzelne Zahl oder numpy.arccos() für Berechnungen mit Arrays. Beide Funktionen geben Winkel im Bogenmaß zurück.
math.acos() für einen einzelnen Wert verwenden
Die Funktion math.acos() aus der Standardbibliothek akzeptiert eine reelle Zahl zwischen -1 und 1. Zum Beispiel entspricht der Kosinuswert 0,5 einem Winkel von π/3 im Bogenmaß oder 60 Grad.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import math
cosine_value = 0.5
angle_radians = math.acos(cosine_value)
print(angle_radians)
1.0471975511965979
Dieses Beispiel gibt den Winkel im Bogenmaß aus. Der zurückgegebene Wert beträgt ungefähr 1,0472, also π/3. Der Hauptwert des Arkuskosinus liegt zwischen 0 und π im Bogenmaß.
Das Ergebnis vom Bogenmaß in Grad umrechnen
Verwenden Sie math.degrees(), um das Ergebnis umzurechnen. degrees() ist eine Funktion im Modul math und keine eigenständige integrierte Funktion. Die Formatierung bestimmt, wie viele Nachkommastellen angezeigt werden; der zugrunde liegende Gleitkommawert behält seine übliche Genauigkeit.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import math
cosine_value = 0.5
angle_radians = math.acos(cosine_value)
angle_degrees = math.degrees(angle_radians)
print(f"{angle_degrees:.1f} degrees")
60.0 degrees
Das Beispiel zeigt den Winkel mit einer Nachkommastelle an. Ändern Sie .1f, um die Anzahl der Nachkommastellen im formatierten Text festzulegen.
numpy.arccos() mit Arrays verwenden
NumPy ist ein Drittanbieterpaket. Installieren Sie es daher in Ihrer Umgebung, bevor Sie dieses Beispiel verwenden. Die Operation arccos wird elementweise auf ein Array angewendet. Das ist nützlich, wenn Ihre Eingabewerte bereits als NumPy-Daten organisiert sind.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
cosine_values = np.array([0.5, 1.0, -1.0])
angles_radians = np.arccos(cosine_values)
print(angles_radians)
[1.04719755 0. 3.14159265]
Das Ergebnis enthält für jede Eingabe einen Winkel im Bogenmaß: ungefähr π/3, 0 und π. NumPy kann den Arkuskosinus auch für einen einzelnen Wert berechnen. Wenn Sie jedoch nur ein skalares Ergebnis benötigen, ist math.acos() die einfachere Wahl.
Eingabebereich und Wahl zwischen math.acos() und numpy.arccos()
Für einen Arkuskosinus mit reellen Ergebnissen muss jede Eingabe einschließlich der Grenzen zwischen -1 und 1 liegen. Außerhalb dieses Intervalls gibt es keinen reellen Arkuskosinus. math.acos() löst bei einem Wert außerhalb des Bereichs einen ValueError aus. Bei den üblichen NumPy-Fehlereinstellungen gibt numpy.arccos() für ein solches Element nan zurück und gibt eine Laufzeitwarnung aus. Prüfen oder begrenzen Sie berechnete Kosinuswerte nur, wenn das zur Bedeutung Ihrer Berechnung passt; eine Begrenzung kann einen vorgelagerten Fehler verdecken. Wenn ein Wert aus dem Skalarprodukt normalisierter Vektoren stammt, kann die Gleitkommarundung ihn knapp über den zulässigen Bereich verschieben. Begrenzen Sie ihn nur, wenn Sie wissen, dass die Abweichung durch Rundung entstanden ist; andernfalls sollten Sie die Berechnung untersuchen. Prüfen Sie bei einem Array, welche Einträge außerhalb des Bereichs liegen, bevor Sie die Ergebnisse verwenden.
Verwenden Sie math.acos() für einen einzelnen Skalar und numpy.arccos() für Arrays oder vektorisierte Berechnungen. NumPy gehört nicht zur Python-Standardbibliothek. Der wesentliche Grund für die Wahl ist hier die arrayorientierte Schnittstelle; die Leistung hängt von der Arbeitslast ab und ist nicht bei jeder Eingabegröße garantiert besser.