我有一个2.7MM坐标的数据帧,还有一个2000个坐标的单独列表。我试图返回每一行中的坐标与列表中每个坐标之间的最小距离。下面的代码在小范围内工作(dataframe有200行),但是当计算超过2.7MM行时,它似乎永远运行。在
from haversine import haversine
df
Latitude Longitude
39.989 -89.980
39.923 -89.901
39.990 -89.987
39.884 -89.943
39.030 -89.931
end_coords_list = [(41.342,-90.423),(40.349,-91.394),(38.928,-89.323)]
for row in df.itertuples():
def min_distance(row):
beg_coord = (row.Latitude, row.Longitude)
return min(haversine(beg_coord, end_coord) for end_coord in end_coords_list)
df['Min_Distance'] = df.apply(min_distance, axis=1)
我知道问题在于正在进行的计算的数量之多(57mm*2000=~114亿),而且运行这么多循环的效率非常低。在
根据我的研究,向量化的NumPy函数似乎是一个更好的方法,但是我对Python和NumPy还不太熟悉,所以我不太确定在这种特殊情况下如何实现它。在
理想输出:
^{pr2}$提前谢谢!在
^{} 的本质是:
这里有一个向量化方法,利用强大的^{} 和
^{pr2}$NumPy ufuncs
来替换这些数学模块函数,这样我们就可以一次性地对整个数组进行操作-为了进一步提高性能,我们可以使用^{} module 来代替超越函数。在
运行时测试和验证
方法-
验证-
时间安排-
相关问题 更多 >
编程相关推荐