gpt4 book ai didi

python - 如何使用带有 NumPy 数组的矢量化来使用 Geopy 库为大型数据集计算测地线距离?

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:48 24 4
gpt4 key购买 nike

我正在尝试从一个数据框计算测地距离,该数据框由四列纬度和经度数据组成,大约有 300 万行。我使用 apply lambda 方法来完成它,但完成任务需要 18 分钟。有没有办法对 NumPy 数组使用矢量化来加速计算?谢谢你的回答。

我的代码使用 apply 和 lambda 方法:

from geopy import distance

df['geo_dist'] = df.apply(lambda x: distance.distance(
(x['start_latitude'], x['start_longitude']),
(x['end_latitude'], x['end_longitude'])).miles, axis=1)

更新:

我正在尝试这段代码,但它给了我错误:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。如果有人可以提供帮助,我们将不胜感激。

df['geo_dist'] = distance.distance(
(df['start_latitude'].values, df['start_longitude'].values),
(df['end_latitude'].values, df['end_longitude'].values)).miles

最佳答案

我认为您可能会考虑为此使用 geopandas,它是 pandas(因此也是 numpy)的扩展,旨在非常快速地进行这些类型的计算。

具体来说,它has a method for calculating the distance between sets of points in a GeoSeries ,它可以是 GeoDataFrame 的一列。我相当确定此方法利用 numexpr 进行矢量化。

它应该看起来像这样,您将数据框转换为具有(至少)两个 GeoSeries 列的 GeoDataFrame,您可以将它们用于原点和点目的地。这应该返回一个 GeoSeries 对象:

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

geometry = [Point(xy) for xy in zip(df.longitude, df.latitude)]
gdf = gpd.GeoDataFrame(df, crs={'init': 'epsg:4326'}, geometry=geometry)

distances = gdf.geometry.distance(gdf.destination_geometry)

关于python - 如何使用带有 NumPy 数组的矢量化来使用 Geopy 库为大型数据集计算测地线距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50275057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com