Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah saya boleh mengira dengan cekap jarak antara berjuta-juta koordinat latitud/longitud dalam kerangka data Pandas menggunakan Python?
Penghampiran Haversine Pantas dalam Python/Panda
Cabaran timbul apabila mengira jarak antara pasangan titik yang diwakili oleh koordinat latitud dan longitud yang disimpan dalam Bingkai data Pandas. Pendekatan naif menggunakan gelung Python untuk mengulangi setiap baris dan menggunakan formula haversine boleh menjadi mahal dari segi pengiraan untuk berjuta-juta baris. Walau bagaimanapun, mengoptimumkan proses ini adalah mungkin.
Untuk mencapai pengiraan yang lebih pantas, kami boleh menggunakan vektorisasi menggunakan NumPy. NumPy menyediakan operasi berasaskan tatasusunan yang boleh meningkatkan prestasi dengan ketara dengan mengelakkan gelung eksplisit. Berikut ialah versi NumPy vektor bagi fungsi haversine:
<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>
Faedah Utama:
Contoh Penggunaan:
<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>
Dengan mengeksploitasi keupayaan vektorisasi NumPy, anda boleh mengira jarak antara berjuta-juta mata hampir serta-merta. Pendekatan yang dioptimumkan ini boleh meningkatkan kecekapan tugas analisis geospatial dengan ketara dalam Python/Panda.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengira dengan cekap jarak antara berjuta-juta koordinat latitud/longitud dalam kerangka data Pandas menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!