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?

Wie können Sie in Python und Pandas schnell Entfernungen zwischen geografischen Koordinaten für große Datensätze berechnen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 18:58:02308Durchsuche

How Can You Quickly Calculate Distances Between Geographic Coordinates in Python and Pandas for Large Datasets?

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!

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