scipy.spatial.KDTree和scipy.spatial.cKDTree之间的区别

时间:2011-08-03 18:16:28

标签: python scipy kdtree

这两种算法有什么区别?

3 个答案:

答案 0 :(得分:34)

cKDTreeKDTree的一个子集,用C ++编写,用Cython包装,因此速度更快。

他们每个人都是

  

二进制trie,其每个节点代表一个轴对齐的超矩形。每个节点指定一个轴,并根据它们沿该轴的坐标是否大于或小于特定值来分割该组点。

但是KDTree

  

还支持所有邻居查询,包括点数组和其他kd树。这些确实使用了一种相当有效的算法,但kd-tree不一定是这种计算的最佳数据结构。

答案 1 :(得分:12)

在一个用例中(5D最近邻居在KDTree中查找大约100K点)cKDTree比KDTree快大约12倍。

答案 2 :(得分:1)

当前,两者的API几乎相同,并且cKDTreeKDTree快。 因此,在不久的将来,SciPy开发人员计划删除KDTree,并且cKDTree将以向后兼容的方式重命名为KDTree

参考: 详细的SciPy路线图— SciPy v1.6.0.dev参考指南http://scipy.github.io/devdocs/roadmap-detailed.html#spatial