matlab中两个失配矩阵的比较
我有两个维度不匹配的矩阵。A是16x2矩阵,B是17x2矩阵。首先,我想在A和B的第一列中找到任何数字,例如leq 90。假设A的第一列有8个数字,B的第一列有6个数字,即LEQ150。然后我希望能够比较A和B,这样如果A中的任何数字在B的公差范围内(仅第一列),那么我希望将该数字保留在A中,否则删除A中的整行。例如,如果A中第一列中的8个数字=[25,34,45,55,66,75,84,110],而B=[10,30,50,70,90,110]并且想要找到彼此在+-5范围内的任意两个数字一次,以得到结果 C=[34,45,66,84,110]。请注意,我需要45或55,但不是两者都需要。C当然是2x1矩阵,但第2列中的值与比较无关。matlab中两个失配矩阵的比较,matlab,Matlab,我有两个维度不匹配的矩阵。A是16x2矩阵,B是17x2矩阵。首先,我想在A和B的第一列中找到任何数字,例如leq 90。假设A的第一列有8个数字,B的第一列有6个数字,即LEQ150。然后我希望能够比较A和B,这样如果A中的任何数字在B的公差范围内(仅第一列),那么我希望将该数字保留在A中,否则删除A中的整行。例如,如果A中第一列中的8个数字=[25,34,45,55,66,75,84,110],而B=[10,30,50,70,90,110]并且想要找到彼此在+-5范围内的任意两个数字一次,以
谢谢让我们假设检查后的A和B矩阵如下所示(根据您的值) 定义公差并创建一个8 x 6矩阵,用于比较a第1列中每个元素与B第1列中每个元素的绝对差值:
tol = 5;
C = abs(bsxfun(@minus, A(:,1), B(:,1)'))<=tol;
>> C
C =
0 1 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 1 0 0
0 0 0 0 0 0
0 0 0 0 0 1
最后,使用any仅指定D中的那些行,即A中的元素在B中至少有一个匹配项,并拒绝所有其他匹配项
A(~any(D, 2), :) = []; % reject points that don't match
>> A
A =
25 1
45 3
66 5
110 8
按照你的规则,你将得到25(+5到30),而不是34(-4到30但使用了30),45(+5到50),而不是55(-5到50但使用了50),66,而不是75(使用了70),而不是84110=>
[25,45,66110]
,除非我遗漏了什么。
D = C; % initialize matrix of unique elements
for i = 1:size(C,1)-1
D(i+1:end, C(i,:)) = 0; % if more than one match, keep only first
end
D =
0 1 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
A(~any(D, 2), :) = []; % reject points that don't match
>> A
A =
25 1
45 3
66 5
110 8