我对“找到最近邻居”算法略有不同,其中包括拒绝那些不满足特定条件的算法,我无法想到如何有效地做到这一点。
我所追求的是找到当前视线中的k个最近邻居。遗憾的是,scipy.spatial.cKDTree
没有提供使用过滤器进行搜索以有条件地拒绝点的选项。
我能想出的最好的算法是查询n个最近邻居,如果没有k在视线内,则再次查询2n个最近邻居并重复。不幸的是,这意味着在最坏的情况下重复计算n个最近的邻居。我必须重复此查询的次数越多,性能就越差。另一方面,如果不需要返回的大多数点,设置n太高可能会浪费。
视线经常变化,所以我不能每次都重新计算cKDTree
。有什么建议?
答案 0 :(得分:0)
如果您正在寻找视线中的邻居,则无法使用
之类的方法cKDTree.query_ball_point(self,x,r,p,eps)
允许您在 x 数组点周围查询KDTree以查找 r 半径范围内的邻居。 除非我误解了你的问题,否则似乎已知视线并且等同于 r 值。