Schnelle Haversine-Approximation in Python/Pandas
Eine Herausforderung entsteht bei der Berechnung von Abständen zwischen Punktpaaren, die durch in a gespeicherte Breiten- und Längenkoordinaten dargestellt werden Pandas-Datenrahmen. Der naive Ansatz, jede Zeile mit einer Python-Schleife zu durchlaufen und die Haversinus-Formel anzuwenden, kann bei Millionen von Zeilen rechenintensiv sein. Eine Optimierung dieses Prozesses ist jedoch möglich.
Um eine schnellere Berechnung zu erreichen, können wir die Vektorisierung mit NumPy einsetzen. NumPy bietet Array-basierte Operationen, die die Leistung erheblich verbessern können, indem explizite Schleifen vermieden werden. Hier ist eine vektorisierte NumPy-Version der Haversinus-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>
Hauptvorteile:
Beispielverwendung:
<code class="python">import numpy as np import pandas lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000) df = pandas.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2}) km = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2']) # Or, to create a new column for distances: df['distance'] = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2'])</code>
Durch die Nutzung der Vektorisierungsfunktionen von NumPy wird es wird es möglich, Abstände zwischen Millionen von Punkten nahezu augenblicklich zu berechnen. Dieser optimierte Ansatz kann die Effizienz von Geoanalyseaufgaben in Python/Pandas erheblich verbessern.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Python effizient Entfernungen zwischen Millionen von Breiten-/Längengradkoordinaten in einem Pandas-Datenrahmen berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!