我有一组在2D平面上的点(x,y)。给定一个点(x0,y0)和数字k,如何在点集中找到(x0,x0)的第k个最近邻居。具体来说,点集由两个数组表示:x和y。点(x0,y0)由索引i0给出。它意味着x0 = x(i0)和y0 = y(i0)。
是否有Matlab中的任何函数或其他方法可以帮助我解决这个问题。如果Matlab没有这种函数,您能否建议其他有效的方法。
编辑:我必须为集合中的每个点(x0,y0)计算这种距离。集合的大小约为1000。 k的值应该约为sqrt(1500)。最糟糕的是,我要做很多次这样的计算。在每次迭代中,集合都会改变,我会再次计算距离。因此,运行时间是一个关键问题。
是否有Matlab中的任何函数或其他方法可以帮助我解决这个问题。如果Matlab没有这种函数,您能否建议其他有效的方法。
编辑:我必须为集合中的每个点(x0,y0)计算这种距离。集合的大小约为1000。 k的值应该约为sqrt(1500)。最糟糕的是,我要做很多次这样的计算。在每次迭代中,集合都会改变,我会再次计算距离。因此,运行时间是一个关键问题。
knnsearch
在某些条件下使用,通常要快得多,构建花费O(N lg^2 N),1个最近邻花费O(lg N),并且我猜,在k较小且数据集有利的情况下,k个最近邻大约需要花费O(k(lg k)(lg N))(思考:通过二分查找)。 (这意味着,例如,如果您有10000个点,则应该快100到1000倍左右。)因此,更推荐使用knnsearch。 - Evgeni Sergeev