如何在python中更快地计算多个点组合之间的最小地理位置距离?

问题描述

我是Python的新手。我试图找到每个客户到商店之间的最小距离。目前,我的数据中有约1500家商店和约67万名客户。我必须计算670K客户x 1500家商店的地理位置距离,并找到每个客户的最小距离。

我在下面创建了Haversine函数:

import numpy as np
def haversine_np(lon1,lat1,lon2,lat2):

    lon1,lat2 = map(np.radians,[lon1,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))
    miles = 6367 * c/1.609
    return miles

,我的数据集如下所示,客户的1个数据框(cst_geo)和商店的1个数据框(store_geo)。由于无法共享真实数据的摘要,因此下面的数字组成了。

客户编号|纬度|经度


A123    | 39.342  | -40.800
B456    | 38.978  | -41.759
C789    | 36.237  | -77.348

商店ID |纬度|经度


S1     | 59.342  | -60.800
S2     | 28.978  | -71.759
S3     | 56.237  | -87.348

我在下面编写了一个for循环来尝试进行此计算,但运行时间超过了8小时。我尝试使用 deco 无法对其进行进一步优化。感谢您可以提供的任何帮助!

mindist=[]
for i in cst_geo.index:
    dist=[]
    for j in store_geo.index:
        dist.append(haversine_np(cst_geo.longitude[i],cst_geo.latitude[i],store_geo.longitude[j],store_geo.latitude[j]))    
    mindist.append(min(dist))

更新:我在此链接上使用了答案,并且可以正常工作。 Efficient computation of minimum of Haversine distances

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)