Быстрый способ вычисления минимального расстояния (гаверсинуса) между точками

Я строю алгоритм, и в какой-то момент мне нужно вычислить минимальное расстояние (и индекс) точки p и список точек (centers). Т.е. Мне нужно найти ближайший элемент в centers к p.

На данный момент я использую fasthaversine, и мой код выглядит следующим образом:

sample_array = [sample for i in range(len(centers))]
distances = haversine(sample_array, centers, unit='m')
min_index = np.argmin(distances)

centers может быть очень длинным списком, так что это может занять много времени. Кто-нибудь может предложить что-нибудь побыстрее?

Редактировать: я попробовал подход BallTree, но он кажется медленнее, чем указано выше. Для большего контекста мне нужно запустить это для большого количества точек p, и каждый раз centers будет другим, поэтому мне нужно каждый раз создавать BallTree.


person TheDeC    schedule 24.03.2021    source источник