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>
主要優點:
用法範例:
<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中文網其他相關文章!