问题描述
几年前我问过一个与此类似的问题,并得到了一个很好的实用答案。但是,我希望显着提高此代码的速度。
我基本上有两组 gps 坐标:例如,一组数据框是酒店的坐标,另一组是机场的坐标。我想查看具有纬度/经度坐标的数据框 A(酒店),然后从每个酒店的数据框 B 中找到最近的机场。
我可以使用以下代码执行此操作,并且一切正常:
import pandas as pd
import geopy.distance
df = pd.read_csv('AirportCoords.csv')
df2 = pd.read_csv('HotelCoords.csv')
for i,row in df.iterrows(): # A
a = row.latitude,row.longitude
distances = []
for j,row2 in df2.iterrows(): # B
b = row2.lat,row2.long
distances.append(geopy.distance.geodesic(a,b).km)
min_distance = min(distances)
min_index = distances.index(min_distance)
但是,这需要很长时间。我试图通过使用 scipy 的 cdist 来加快速度,但是,虽然速度很快,但返回的是欧几里德距离。
有什么方法可以将 cdist 输出转换为我想要的?或者有什么其他方法可以让这个过程快速进行?
from scipy.spatial import distance
a = np.array(df[['lat','long']])
b = np.array(df2[['lat','long']])
print(distance.cdist(a,b).min(axis=1)
这会打印最短的欧几里得距离,而我正在尝试获取公里。
提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)