Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Python schnell Abstände zwischen Breiten- und Längenkoordinaten berechnen?

Wie kann ich in Python schnell Abstände zwischen Breiten- und Längenkoordinaten berechnen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 23:36:451054Durchsuche

How Can I Calculate Distances Between Latitude and Longitude Coordinates Quickly in Python?

Schnelle Haversine-Approximation: Eine Python/Pandas-Lösung

Einführung

Berechnung von Abständen zwischen Breitengraden und Längengradkoordinaten ist eine häufige Aufgabe bei der Geodatenanalyse. Allerdings kann die Verwendung der traditionellen Haversine-Formel für Millionen von Zeilen rechenintensiv sein. Dieser Artikel stellt eine schnelle Alternative unter Verwendung der NumPy-Vektorisierung für schnellere Ausführungszeiten vor.

Vektorisierte NumPy-Lösung

Der NumPy-Vektorisierungsansatz nutzt NumPy-Funktionen, die auf Arrays von Daten arbeiten, wodurch vermieden wird die Langsamkeit des Schleifens in Python. Unten ist die vektorisierte Version der Haversine-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>

Verwendung

Um die vektorisierte Lösung zu verwenden, sollten die eingegebenen Breiten- und Längengrade NumPy-Arrays sein. Um beispielsweise Entfernungen für einen Pandas DataFrame zu berechnen, können Sie die erforderlichen Spalten extrahieren und die Funktion haversine_np wie folgt verwenden:

<code class="python">df = pd.DataFrame(...your_dataframe...)
lon1, lat1, lon2, lat2 = df['lon1'], df['lat1'], df['lon2'], df['lat2']
df['distance'] = haversine_np(lon1, lat1, lon2, lat2)</code>

Vorteile

Die NumPy-Vektorisierung Der Ansatz verbessert die Leistung erheblich und ermöglicht die sofortige Berechnung von Millionen von Entfernungen. Dies wird erreicht, indem die Langsamkeit von Schleifen vermieden und die effizienten Array-Operationen von NumPy genutzt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich in Python schnell Abstände zwischen Breiten- und Längenkoordinaten 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