Wie kann ich mit Python effizient Entfernungen zwischen Millionen von Breiten-/Längengradkoordinaten in einem Pandas-Datenrahmen berechnen?

Mary-Kate Olsen
Freigeben: 2024-11-02 03:46:30
Original
844 Leute haben es durchsucht

How can I efficiently calculate distances between millions of latitude/longitude coordinates in a Pandas dataframe using Python?

Schnelle Haversine-Approximation in Python/Pandas

Eine Herausforderung entsteht bei der Berechnung von Abständen zwischen Punktpaaren, die durch in a gespeicherte Breiten- und Längenkoordinaten dargestellt werden Pandas-Datenrahmen. Der naive Ansatz, jede Zeile mit einer Python-Schleife zu durchlaufen und die Haversinus-Formel anzuwenden, kann bei Millionen von Zeilen rechenintensiv sein. Eine Optimierung dieses Prozesses ist jedoch möglich.

Um eine schnellere Berechnung zu erreichen, können wir die Vektorisierung mit NumPy einsetzen. NumPy bietet Array-basierte Operationen, die die Leistung erheblich verbessern können, indem explizite Schleifen vermieden werden. Hier ist eine vektorisierte NumPy-Version der Haversinus-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

Hauptvorteile:

  1. Geschwindigkeit: Die vektorisierten Operationen von NumPy sind hoch optimiert und vermeidet den mit Schleifen verbundenen Overhead.
  2. Parallelisierung: NumPy unterstützt Parallelisierung, was die Berechnung auf Multi-Core-Systemen weiter beschleunigen kann.
  3. Prägnanz: Die vektorisierte Implementierung ist prägnanter und eleganter als die Schleifenversion.

Beispielverwendung:

<code class="python">import numpy as np
import pandas

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'])

# Or, to create a new column for distances:
df['distance'] = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2'])</code>
Nach dem Login kopieren

Durch die Nutzung der Vektorisierungsfunktionen von NumPy wird es wird es möglich, Abstände zwischen Millionen von Punkten nahezu augenblicklich zu berechnen. Dieser optimierte Ansatz kann die Effizienz von Geoanalyseaufgaben in Python/Pandas erheblich verbessern.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Python effizient Entfernungen zwischen Millionen von Breiten-/Längengradkoordinaten in einem Pandas-Datenrahmen 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!