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中文網其他相關文章!