快速半正弦近似:Python/Pandas 解决方案
简介
计算纬度之间的距离经度坐标是地理空间数据分析中的常见任务。然而,对数百万行使用传统的半正矢公式可能会导致计算成本高昂。本文提出了一种使用 NumPy 向量化来缩短执行时间的快速替代方案。
向量化 NumPy 解决方案
NumPy 向量化方法利用对数据数组进行操作的 NumPy 函数,避免了Python 中循环的速度很慢。以下是半正弦函数的矢量化版本:
<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>
用法
要使用矢量化解决方案,输入纬度和经度值应为 NumPy 数组。例如,要计算 Pandas DataFrame 的距离,您可以提取必要的列并使用 hasrsine_np 函数,如下所示:
<code class="python">df = pd.DataFrame(...your_dataframe...) lon1, lat1, lon2, lat2 = df['lon1'], df['lat1'], df['lon2'], df['lat2'] df['distance'] = haversine_np(lon1, lat1, lon2, lat2)</code>
优点
NumPy 向量化该方法显着提高了性能,可以立即计算数百万个距离。这是通过避免循环缓慢并利用 NumPy 的高效数组操作来实现的。
以上是如何在Python中快速计算经纬度坐标之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!