Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Haversine-Abstände für Millionen von Datenpunkten in Python effizient berechnen?

Wie kann ich Haversine-Abstände für Millionen von Datenpunkten in Python effizient berechnen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 00:25:02520Durchsuche

How can I efficiently calculate Haversine distances for millions of data points in Python?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn