Найдите минимальное расстояние между наборами координат GPS

Я задал подобный вопрос пару лет назад и получил отличный функциональный ответ. Тем не менее, я хочу значительно улучшить скорость этого кода.

У меня в основном есть два набора координат 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)

Однако это занимает ОЧЕНЬ много времени. Я попытался ускорить процесс, используя cdist 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)

Это печатает кратчайшее евклидово расстояние, а я пытаюсь получить километры.

Заранее спасибо!


person TeenySceney    schedule 08.03.2021    source источник
comment
Распараллеливание может помочь: stackoverflow.com/a/57189777   -  person KostyaEsmukov    schedule 20.03.2021