我有一组格式为[X Y]的2D数据,并且我将基于某个距离阈值对它们进行细化,即如果点非常接近小于阈值,则消除一个。该过程持续到任何两点之间的距离大于阈值。我开发了一个代码来做到这一点,但它非常耗时。我想知道在Matlab中是否有更好的方法。
答案 0 :(得分:0)
只是为了给出一个比成对比较更好的想法。
设d是你想要达到的最小距离。创建边长为sqrt(d)
的正方形网格。
d
答案 1 :(得分:0)
您可以按照此处所述计算距离
Calculating distance of all the points in a region with each other
所以简单地复制粘贴他的答案:
X are your points with coordinates x = X(:,1), y = X(:,2)
dist = sqrt(bsxfun(@ minus,X(:,1),X(:,1)')。^ 2 + bsxfun(@ minus,X(:,2),X(:, 2)')^ 2)
。这为您提供了一个矩阵,其中包含每个点之间的所有距离。使用find(dist<thres)
,您可以获得低于您的距离的位置。然后使用ind2sub
标识要删除的数据的位置