Schnelle Haversine-Approximation: Eine Python/Pandas-Lösung
Einführung
Berechnung von Abständen zwischen Breitengraden und Längengradkoordinaten ist eine häufige Aufgabe bei der Geodatenanalyse. Allerdings kann die Verwendung der traditionellen Haversine-Formel für Millionen von Zeilen rechenintensiv sein. Dieser Artikel stellt eine schnelle Alternative unter Verwendung der NumPy-Vektorisierung für schnellere Ausführungszeiten vor.
Vektorisierte NumPy-Lösung
Der NumPy-Vektorisierungsansatz nutzt NumPy-Funktionen, die auf Arrays von Daten arbeiten, wodurch vermieden wird die Langsamkeit des Schleifens in Python. Unten ist die vektorisierte Version der Haversine-Funktion:
<code class="python">import numpy as np def haversine_np(lon1, lat1, lon2, lat2): """ Calculate the great circle distance between two points on the earth (specified in decimal degrees) All args must be of equal length. """ lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2]) dlon = lon2 - lon1 dlat = lat2 - lat1 a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2 c = 2 * np.arcsin(np.sqrt(a)) km = 6378.137 * c return km</code>
Verwendung
Um die vektorisierte Lösung zu verwenden, sollten die eingegebenen Breiten- und Längengrade NumPy-Arrays sein. Um beispielsweise Entfernungen für einen Pandas DataFrame zu berechnen, können Sie die erforderlichen Spalten extrahieren und die Funktion haversine_np wie folgt verwenden:
<code class="python">df = pd.DataFrame(...your_dataframe...) lon1, lat1, lon2, lat2 = df['lon1'], df['lat1'], df['lon2'], df['lat2'] df['distance'] = haversine_np(lon1, lat1, lon2, lat2)</code>
Vorteile
Die NumPy-Vektorisierung Der Ansatz verbessert die Leistung erheblich und ermöglicht die sofortige Berechnung von Millionen von Entfernungen. Dies wird erreicht, indem die Langsamkeit von Schleifen vermieden und die effizienten Array-Operationen von NumPy genutzt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich in Python schnell Abstände zwischen Breiten- und Längenkoordinaten berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!