<分区>
我正在尝试找出每位顾客与商店之间的最小距离。目前,我的数据中有约 1500 家商店和约 67 万名顾客。我必须计算 670K 客户 x 1500 家商店的地理距离,并找到每个客户的最小距离。
我在下面创建了 haversine 函数:
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))
miles = 6367 * c/1.609
return miles
我的数据集如下所示,1 个客户数据框 (cst_geo
) 和 1 个商店数据框 (store_geo
)。以下数字是我编造的,因为我无法分享真实数据的片段:
我在下面编写了一个 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))