首页 >后端开发 >Python教程 >如何快速计算Python和Pandas中大数据集地理坐标之间的距离?

如何快速计算Python和Pandas中大数据集地理坐标之间的距离?

Patricia Arquette
Patricia Arquette原创
2024-11-02 18:58:02344浏览

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