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中文网其他相关文章!