我有两个矩阵A
和B
,其中行数可以变化。 A
和B
不一定具有相同的行数。
例如:
A = [ 110 90
130 140
230 50
370 210 ];
B = [ 321 95
102 35
303 200 ];
现在矩阵A
和B
有'对应点'。对应点是两个矩阵的第2列中的值在+/-20
内的行。
例如:
A(1,2) = 90
和B(1,2) = 95
,差异在+/-20
之内,因此A(1,:)
和B(1,:)
是对应点。 A(2,2) = 140
和B(2,2) = 35
,+/-20
中的差异不,因此A(2,:)
和B(2,:)
不< / strong>对应点。A(3,2) = 50
和B(2,2) = 35
,差异在+/-20
之内,因此A(3,:)
和B(2,:)
是相应的点。使用此功能我想分别在A
和B
中存储C
和D
的对应点。对于上面的例子,最终的矩阵应如下所示:
C = [ 110 90
230 50
370 210 ]
D = [ 321 95
102 35
303 200 ]
答案 0 :(得分:2)
您可以使用pdist2
dists = pdist2( A(:,2), B(:,2) )
>> dists = [ 5 55 110
45 105 60
45 15 150
115 175 10 ]
然后获取所有对应点的索引,如阈值20所定义。
% Get combinations within tolerance
idx = dists < 20;
% Get indices
[iA, iB] = find(idx);
然后你可以创建最终的矩阵
C = A(iA, :);
D = B(iB, :);
修改:确保每个配对都是唯一的一种方法(即A(1,:)
无法与来自B
的多个行配对)将获得最小值{{1}每个行/列。注意:如果距离完全相同,这仍然会给你重复的匹配,你还没有定义如何处理它。
dists