У меня есть большие 2D-массивы с несортированными (X, Y) точками, для которых мне нужно знать, какие точки находятся в непосредственной близости друг от друга (поиск ближайших соседей). Я использовал cKDTree и query_ball_tree с результатами для массивов с 500 000 (X, Y) точками. Тем не менее, когда я пытаюсь использовать один и тот же алгоритм для наборов данных из более чем 1 000 000 точек, query_ball_tree приводит к MemoryError.MemoryError в Python при использовании cKDTree(). Query_ball_tree
Я использую 64-разрядную Windows с 16 ГБ встроенной памяти и попробовал как 32-битную, так и 64-разрядную версии Python и модулей расширения (scipy и numpy).
def Construct_SearchTree(AllXyPoints):
KDsearch = cKDTree(AllXyPoints)
return KDsearch.query_ball_tree(KDsearch, Maxdist)
Мои вопросы:
1) Кто-нибудь знает о качестве альтернативы cKDTree/query_ball_tree, который потребляет меньше памяти? В этом случае скорость менее важна для использования памяти.
2) Я надеялся, что переключение с 32-битного на 64-битный python & расширений решит MemoryError. Что может быть причиной того, что этого не произошло?
Благодарим за предоставленную помощь и совет.
Обратите внимание, что это не совсем то, что ищет OP: вы предлагаете '.query()' while '.query_ball_tree()' необходимо. Не совсем справедливое сравнение. – ximiki
@ximiki, спасибо! Я удивлен, что никто не упомянул об этом за 4,5 года с тех пор, как я опубликовал это. Я обновил свой ответ. – JaminSore
Шариковое дерево также не является деревом KD (и эффекты не упоминаются, несмотря на то, что он работает с некоторыми заданными размерами). Но я также рекомендую sklearn для этих данных. – sascha