【问题标题】:Is there any way to add points to KD tree implementation in Scipy有没有办法在 Scipy 中为 KD 树实现添加点
【发布时间】:2013-07-22 23:27:22
【问题描述】:

我有一组要构建 KD 树的点。一段时间后,我想定期向这个 KDTree 添加更多点。有没有办法在 scipy 实现中做到这一点

【问题讨论】:

标签: python scipy kdtree


【解决方案1】:

k-d-trees 的问题在于它们不是为更新而设计的

虽然您可以稍微轻松地插入对象(如果您使用基于指针的表示,它比基于数组的树需要更多的内存),并使用诸如墓碑消息之类的技巧进行删除,但进行此类更改会降级树的性能

我不知道增量重新平衡 k-d-tree 的好方法。对于一维树,您有红黑树、B-树、B*-树、B+-树等。由于旋转轴和不同的排序,这些显然不适用于 k-d-trees。所以最后,使用 k-d-tree,最好只收集更改,并不时进行全树重建。那么至少树的这一部分会很好。

但是,存在一个类似的结构(在我的实验中,它的性能通常优于 k-d-tree!):R*-tree。它不是执行二元拆分,而是使用矩形边界框来收集对象,并且在使树成为动态数据结构方面投入了很多心思。这也是 R*-tree 比 R-tree 表现更好的地方:它对 kNN 搜索有更巧妙的拆分,并且它执行增量重新平衡以改进其结构。

【讨论】:

  • R*-tree 在 Python/Scipy 中的任何实现?
  • 四叉树的更新效果更好吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-19
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多