【问题标题】:nearest k neighbours that satisfy conditions (python)满足条件的最近 k 个邻居(python)
【发布时间】:2013-08-11 06:35:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python constraints nearest-neighbor kdtree


    【解决方案1】:

    如果你是在视线内寻找邻居,就不能使用像

    这样的方法

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

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

    【讨论】:

    • 该问题中的视线由满足以下条件的多边形描述:从其中任意点到查询点的线与预定义的边集不相交。 example 可惜半径不是固定的。