Heim >Backend-Entwicklung >Python-Tutorial >Wie können Sie in Python und Pandas schnell Entfernungen zwischen geografischen Koordinaten für große Datensätze berechnen?
Schnelle Haversine-Approximation in Python und Pandas
Die Berechnung von Abständen zwischen geografischen Koordinaten mithilfe der Haversine-Formel kann bei großen Datensätzen zeitaufwändig sein. Für Anwendungen, bei denen die Genauigkeit nicht entscheidend ist und sich die Punkte in kurzer Entfernung (z. B. unter 50 Meilen) befinden, gibt es Optimierungen, die den Prozess erheblich beschleunigen können.
Vectorized Numpy Implementation
Die Haversine-Formel kann mithilfe von NumPy-Arrays vektorisiert werden. Dieser Ansatz nutzt die optimierten mathematischen Funktionen von NumPy, um Berechnungen für ganze Arrays durchzuführen, wodurch explizite Schleifen überflüssig werden und die Leistung verbessert wird.
<code class="python">import numpy as np def haversine_np(lon1, lat1, lon2, lat2): 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>
Pandas-Integration
Integration des Vektorisierten Die NumPy-Funktion mit Pandas-Datenrahmen ist unkompliziert. Die Eingaben für haversine_np können direkt als Spalten aus dem Datenrahmen bereitgestellt werden. Zum Beispiel:
<code class="python">import pandas as pd # Randomly generated data lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000) df = pd.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2}) # Calculate distances using vectorized NumPy function km = haversine_np(df['lon1'], df['lat1'], df['lon2'], df['lat2']) # Append distances to dataframe df['distance'] = km</code>
Vorteile der Vektorisierung
Die Vektorisierung vermeidet die Notwendigkeit expliziter Schleifen, die in Python von Natur aus langsam sind. Stattdessen werden vektorisierte Operationen direkt auf Arrays ausgeführt und nutzen dabei den optimierten zugrunde liegenden C-Code von NumPy. Dies führt zu erheblichen Leistungsverbesserungen, insbesondere bei großen Datensätzen.
Hinweis:
Dieser optimierte Ansatz bietet zwar erhebliche Beschleunigungen, führt jedoch im Vergleich zu zu einem kleinen Kompromiss bei der Genauigkeit die ursprüngliche nicht-vektorisierte Formel. In Fällen jedoch, in denen die Entfernung weniger als 50 Meilen beträgt und die Genauigkeit nicht im Vordergrund steht, überwiegen die Leistungsvorteile den geringfügigen Präzisionsverlust.
Das obige ist der detaillierte Inhalt vonWie können Sie in Python und Pandas schnell Entfernungen zwischen geografischen Koordinaten für große Datensätze berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!