Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中两个失配矩阵的比较_Matlab - Fatal编程技术网

matlab中两个失配矩阵的比较

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是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列中的值与比较无关。
谢谢

让我们假设检查后的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