Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mengira jarak Haversine dengan cekap untuk berjuta-juta titik data dalam Python?

Bagaimanakah saya boleh mengira jarak Haversine dengan cekap untuk berjuta-juta titik data dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 00:25:02406semak imbas

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

Penghampiran Haversine Pantas dalam Python/Panda Menggunakan Vektorisasi Numpy

Apabila berurusan dengan berjuta-juta titik data yang melibatkan koordinat latitud dan longitud, mengira jarak menggunakan formula Haversine boleh memakan masa. Artikel ini menyediakan pelaksanaan Numpy vektor bagi fungsi Haversine untuk meningkatkan prestasi dengan ketara.

Fungsi Haversine Asal:

Fungsi Haversine asal ditulis dalam Python:

<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>

Fungsi Numpy Haversine Vectorized:

Pelaksanaan Numpy vektor mengambil kesempatan daripada operasi tatasusunan yang dioptimumkan 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>

Perbandingan Prestasi:

Fungsi Numpy bervektor boleh memproses berjuta-juta titik input serta-merta. Sebagai contoh, pertimbangkan nilai yang dijana secara rawak:

<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>

Pengiraan ini, yang akan mengambil masa yang banyak dengan fungsi Python asal, diselesaikan serta-merta.

Kesimpulan:

Menvektorkan fungsi Haversine dengan menggunakan Numpy boleh meningkatkan prestasi secara dramatik untuk set data yang besar. Operasi tatasusunan yang dioptimumkan Numpy membolehkan pengendalian berbilang titik data yang cekap, mengurangkan overhed pengiraan dan mempercepatkan pengiraan jarak. Pengoptimuman ini menjadikannya layak untuk melaksanakan analitik geospatial masa nyata pada set data berskala besar.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengira jarak Haversine dengan cekap untuk berjuta-juta titik data dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn