如何找到到给定点的距离在小间隔内的所有点(python)



我有一个三维点云p和一个点p,我想找到所有的点q,使得d-eps < ||q-p|| < d+eps,其中给出了deps。在python中进行这种搜索最有效的方法是什么?

通常我会使用带有KD树的球形邻居查询,但这似乎并不有效,尤其是当d比eps 大得多时

在我的上一期中有关于这个主题的非常有用的注释;我想,你可以在那里找到答案。但总的来说,我认为Scipy的cKDTree和scikit learn的BallTree是最好的选择,但你也可以通过纯粹的NumPy来做到这一点(正如SO帖子中提到的那样(。也要了解R-tree在您的数据上的性能(我没有得到更好的性能,但这是推荐的(
根据我的经验,在SciPy中,cKDTreeKDTree快得多。正如我在回答中指出的,cKDTree将导致内存泄漏和更多的时间消耗,特别是当搜索域增长时(如这里所示,当您增加d时(。在这方面,我建议在增加d时使用BallTree

此外,我的另一个SO问题及其答案可能对本主题也有帮助。

为了进行进一步的评估,除了该示例的预期运行时范围之外,还必须准备一个示例、您尝试过的方法及其产生的运行时。最好准备一个类似的例子由于我上面提到的原因,数据量到您的主数据量。

最新更新