首頁 >後端開發 >Python教學 >如何快速計算Python和Pandas中大數據集地理座標之間的距離?

如何快速計算Python和Pandas中大數據集地理座標之間的距離?

Patricia Arquette
Patricia Arquette原創
2024-11-02 18:58:02307瀏覽

How Can You Quickly Calculate Distances Between Geographic Coordinates in Python and Pandas for Large Datasets?

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

對於大型資料集,使用半正弦公式計算地理座標之間的距離可能非常耗時。對於準確性不重要且點在短距離內(例如 50 英里以下)的應用程序,有一些優化可以顯著加快該過程。

向量化 Numpy 實作

Haversine 公式可以使用 NumPy 陣列進行向量化。這種方法利用 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>

Pandas Integration

整合向量化使用 Pandas 資料幀的 NumPy 函數非常簡單。 hasrsine_np 的輸入可以直接作為資料幀中的欄位提供。例如:

<code class="python">import pandas as pd

# Randomly generated data
lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000)
df = pd.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2})

# Calculate distances using vectorized NumPy function
km = haversine_np(df['lon1'], df['lat1'], df['lon2'], df['lat2'])

# Append distances to dataframe
df['distance'] = km</code>

向量化的好處

向量化避免了對顯式循環的需要,而顯式循環在 Python 中本來就很慢。相反,向量化運算是直接在陣列上執行的,利用 NumPy 的最佳化底層 C 程式碼。這會帶來顯著的效能提升,特別是對於大型資料集。

注意:

雖然這種最佳化方法提供了顯著的加速,但與原始的非向量化公式。然而,對於距離小於 50 英里且準確性並不重要的情況,性能優勢超過了精度的邊際損失。

以上是如何快速計算Python和Pandas中大數據集地理座標之間的距離?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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