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

Barbara Streisand
Freigeben: 2024-10-31 23:36:45
Original
974 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!