Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mengira dengan cekap jarak antara berjuta-juta koordinat latitud/longitud dalam kerangka data Pandas menggunakan Python?

Bagaimanakah saya boleh mengira dengan cekap jarak antara berjuta-juta koordinat latitud/longitud dalam kerangka data Pandas menggunakan Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 03:46:30838semak imbas

How can I efficiently calculate distances between millions of latitude/longitude coordinates in a Pandas dataframe using 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:

  1. Kelajuan: Operasi vektor NumPy sangat tinggi dioptimumkan dan mengelakkan overhed yang berkaitan dengan gelung.
  2. Persejajaran: NumPy menyokong selari, yang boleh mempercepatkan lagi pengiraan pada sistem berbilang teras.
  3. Keringkas: Pelaksanaan vektor ialah lebih ringkas dan elegan daripada bergelung versi.

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!

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