Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Haversine-Abstände für Millionen von Datenpunkten in Python effizient berechnen?
Schnelle Haversine-Approximation in Python/Pandas mithilfe der Numpy-Vektorisierung
Beim Umgang mit Millionen von Datenpunkten mit Breiten- und Längengradkoordinaten werden Entfernungen mithilfe von berechnet Die Haversine-Formel kann zeitaufwändig sein. Dieser Artikel stellt eine vektorisierte Numpy-Implementierung der Haversine-Funktion zur deutlichen Verbesserung der Leistung bereit.
Ursprüngliche Haversine-Funktion:
Die ursprüngliche Haversine-Funktion ist in Python geschrieben:
<code class="python">from math import radians, cos, sin, asin, sqrt def haversine(lon1, lat1, lon2, lat2): # convert decimal degrees to radians lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # haversine formula dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 c = 2 * asin(sqrt(a)) km = 6367 * c return km</code>
Vektorisierte Numpy-Haversine-Funktion:
Die vektorisierte Numpy-Implementierung nutzt die optimierten Array-Operationen von Numpy:
<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>
Leistungsvergleich:
Die vektorisierte Numpy-Funktion kann Millionen von Eingabepunkten sofort verarbeiten. Betrachten Sie beispielsweise zufällig generierte Werte:
<code class="python">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'])</code>
Diese Berechnung, die mit der ursprünglichen Python-Funktion viel Zeit in Anspruch nehmen würde, wird sofort abgeschlossen.
Schlussfolgerung:
Die Vektorisierung der Haversine-Funktion mithilfe von Numpy kann die Leistung großer Datensätze erheblich verbessern. Die optimierten Array-Operationen von Numpy ermöglichen eine effiziente Verarbeitung mehrerer Datenpunkte, reduzieren den Rechenaufwand und beschleunigen Entfernungsberechnungen. Diese Optimierung macht es möglich, Echtzeit-Geoanalysen für große Datensätze durchzuführen.
Das obige ist der detaillierte Inhalt vonWie kann ich Haversine-Abstände für Millionen von Datenpunkten in Python effizient berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!