4

我对“查找 k 个最近邻”算法有一个轻微的变体,其中涉及拒绝那些不满足特定条件的算法,我想不出如何有效地做到这一点。

我所追求的是找到当前视线内的 k 个最近邻居。不幸的是scipy.spatial.cKDTree,没有提供使用过滤器进行搜索以有条件地拒绝点的选项。

我能想出的最好的算法是查询 n 个最近的邻居,如果视线中没有 k,那么再次查询 2n 个最近的邻居并重复。不幸的是,这意味着在最坏的情况下重复重新计算 n 个最近的邻居。我必须重复此查询的次数越多,性能影响就越差。另一方面,如果不需要返回的大多数点,将 n 设置得太高可能会造成浪费。

视线经常变化,所以我也不能cKDTree每次都重新计算。有什么建议么?

4

1 回答 1

0

如果您正在视线内寻找邻居,则无法使用类似的方法

cKDTree.query_ball_point(self, x, r, p, eps)

它允许您在 KDTree 中查询在x数组点周围大小为r的半径内的邻居。除非我误解了你的问题,否则视线似乎是已知的并且相当于这个r值。

于 2013-08-20T15:40:56.947 回答