首頁  >  文章  >  後端開發  >  如何使用 Python 有效計算 Pandas 資料框中數百萬個緯度/經度座標之間的距離?

如何使用 Python 有效計算 Pandas 資料框中數百萬個緯度/經度座標之間的距離?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 03:46:30838瀏覽

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

Python/Pandas 中的快速半正弦近似

計算由儲存在a 中的緯度和經度座標表示的點對之間的距離時會出現挑戰熊貓資料框。對於數百萬行來說,使用 Python 循環迭代每一行並應用半正弦公式的簡單方法可能會導致計算成本高。然而,優化這個過程是可能的。

為了實現更快的計算,我們可以使用 NumPy 進行向量化。 NumPy 提供基於陣列的操作,可透過避免明確循環來顯著提高效能。這是半正弦函數的向量化NumPy 版本:

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

主要優點:

  1. 速度: NumPy 的量化運算非常快速優化並避免與循環相關的開銷。
  2. 並行化:NumPy 支援並行化,這可以進一步加快多核心系統上的運算速度。
  3. 簡潔: 向量化實作比循環版本更簡潔優雅。

用法範例:

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

利用 NumPy 的向量化功能,它幾乎可以立即計算數百萬點之間的距離。這種最佳化方法可以顯著提高 Python/Pandas 中地理空間分析任務的效率。

以上是如何使用 Python 有效計算 Pandas 資料框中數百萬個緯度/經度座標之間的距離?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn