Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah saya boleh mengira jarak Haversine dengan cekap untuk berjuta-juta titik data dalam 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!