В чем разница между этими двумя алгоритмами?
Разница между scipy.spatial.KDTree и scipy.spatial.cKDTree
Ответ 1
cKDTree - это подмножество KDTree, реализованное в C++, завернутое в Cython, поэтому быстрее.
Каждый из них
двоичное trie, каждый из узлов которого представляет собой гиперповерхность, выровненную по оси. Каждый узел определяет ось и разбивает множество точек на основании того, является ли их координата вдоль этой оси больше или меньше определенного значения.
но KDTree
также поддерживает запросы соседей, как с массивами точек, так и с другими kd-деревьями. Они используют достаточно эффективный алгоритм, но kd-дерево не обязательно является лучшей структурой данных для такого рода вычислений.
Ответ 2
В случае использования (ближайший сосед ближайшего соседства 5D в KDTree с приблизительно 100K точек) cKDTree примерно в 12 раз быстрее, чем KDTree.