Оптимизация поиска ближайшего соседа scipy

Я пытаюсь найти всех ближайших соседей, которые находятся в радиусе 1 км. Вот мой скрипт для построения дерева и поиска ближайших точек,

from pysal.cg.kdtree import KDTree

def construct_tree(s):
    data_geopoints = [tuple(x) for x in s[['longitude','latitude']].to_records(index=False)]
    tree = KDTree(data_geopoints, distance_metric='Arc', radius=pysal.cg.RADIUS_EARTH_KM)
    return tree

def get_neighbors(s,tree):
    indices = tree.query_ball_point(s, 1)
    return indices

#Constructing the tree for search
tree = construct_tree(data)

#Finding the nearest neighbours within 1KM
data['neighborhood'] = data['lat_long'].apply(lambda row: get_neighbors(row,tree))

из того, что я прочитал на странице писала, Он говорит -

KD-дерево, построенное поверх функциональности KD-дерева в scipy. Если вы используете составляющей 0.12 или больше использует scipy.пространственный.cKDTree, в противном случае использует scipy.пространственный.KDTree.

в моем случае он должен использовать cKDTree. Это работает отлично для образца набора данных, но с tree.query_ball_point возвращает список индексов в результате. Каждый список будет иметь 100s элементов. Для моих точек данных (2 миллиона записей) это становится все больше и больше и останавливается из-за проблемы с памятью после определенной точки. Есть идеи, как это решить?

1 ответов


на всякий случай, если кто-то ищет ответ на этот вопрос, я решил его, найдя ближайших соседей для группы (дерево.query_ball_point может обрабатывать пакеты) и записывать в базу данных, а затем обрабатывать следующую группу, а не хранить все в памяти. Спасибо.