我有一个三维点云p和一个点p,我想找到所有的点q,使得d-eps < ||q-p|| < d+eps
,其中给出了d
和eps
。在python中进行这种搜索最有效的方法是什么?
通常我会使用带有KD树的球形邻居查询,但这似乎并不有效,尤其是当d比eps 大得多时
在我的上一期中有关于这个主题的非常有用的注释;我想,你可以在那里找到答案。但总的来说,我认为Scipy的cKDTree
和scikit learn的BallTree
是最好的选择,但你也可以通过纯粹的NumPy来做到这一点(正如SO帖子中提到的那样(。也要了解R-tree
在您的数据上的性能(我没有得到更好的性能,但这是推荐的(
根据我的经验,在SciPy中,cKDTree
比KDTree
快得多。正如我在回答中指出的,cKDTree
将导致内存泄漏和更多的时间消耗,特别是当搜索域增长时(如这里所示,当您增加d
时(。在这方面,我建议在增加d
时使用BallTree
。
此外,我的另一个SO问题及其答案可能对本主题也有帮助。
为了进行进一步的评估,除了该示例的预期运行时范围之外,还必须准备一个示例、您尝试过的方法及其产生的运行时。最好准备一个类似的例子由于我上面提到的原因,数据量到您的主数据量。