我有两个大小为A
的{{1}}和B
矩阵,其中Rows X 2
分别为A和B.这些m和n表示欧几里德空间中的点。
我希望执行的任务是匹配A和B的最大点数(假设A的点数少于B),条件是距离小于阈值
Rows = m , n
并且每个对是独一无二的。
我已经看到了这个nearest point pairs但是这对我的问题不起作用,因为对于A中的每个点,它选择B中的最小值。但是,我从A和B中选择的第一对可能是错误导致匹配对的数量减少。
我正在寻找快速解决方案,因为A和B各占约1000个点。同样,一些观点将会留下,我知道这会以某种方式导致详尽的搜索。
我正在寻找一种解决方案,其中在matlab中存在某种内置函数或使用可帮助其matlab代码可用的数据结构,例如d
。如上所述,我必须找到从B到A的唯一最近匹配点。
答案 0 :(得分:0)
您可以使用pdist2来计算两对观察(不同大小)之间的成对距离。最终距离矩阵将是N x M
矩阵,您可以探测高于所需阈值的所有值。
A = randn(1000, 2);
B = randn(500, 2);
D = pdist2(A, B, 'euclidean'); % euclidean distance
d = 0.5; % threshold
indexD = D > d;
pointsA = any(indexD, 2);
pointsB = any(indexD, 1);
这两个向量为A
和B
中的点提供逻辑索引,这些点至少有一个匹配,由最小距离d
定义,另一个。得到的集合将由来自矩阵A(或B)的整个元素集合组成,其中距离{em}的另一个矩阵B(或A)的任何元素的d
以上。
您还可以推广到2个以上的维度或不同的距离指标。