从其他人中查找并排除一个矩阵

时间:2014-03-17 18:49:59

标签: matlab matrix discrete-mathematics set-difference

我正在使用MATLAB。我有以下矩阵

A = [
    1 2 3 4
    5 6 7 8
    1 5 2 3
    6 7 8 9
    1 3 6 2
    6 3 1 6
    9 7 4 7
];

B = [
    1 5 2 3
    6 7 8 9
];

我想找到A - B 所以答案应该是,

ans = [
    1 2 3 4
    5 6 7 8
    1 3 6 2
    6 3 1 6
    9 7 4 7
];

4 个答案:

答案 0 :(得分:2)

setdiff'rows''stable'选项一起使用:

>> C = setdiff(A,B,'rows','stable')
C =
     1     2     3     4
     5     6     7     8
     1     3     6     2
     6     3     1     6
     9     7     4     7

答案 1 :(得分:1)

使用ismember查找常见行并忽略最终行output中的行。

<强>代码

out = A(~ismember(A,B,'rows'),:)

<强>输出

out =

     1     2     3     4
     5     6     7     8
     1     3     6     2
     6     3     1     6
     9     7     4     7

答案 2 :(得分:0)

@Divakar@chappjc's答案是可行的方法。

但我无法邀请bsxfun参加聚会:

C = A(~any(squeeze(all(bsxfun(@eq, A.', permute(B, [2 3 1])))).'),:);

它的朋友pdist2也来了:

C = A(all(pdist2(A, B, 'hamming').'),:);

答案 3 :(得分:0)

clear;
s=0;
A = [

    1 2 3 4
    5 6 7 8
    1 5 2 3
    6 7 8 9
    1 3 6 2
    6 3 1 6
    9 7 4 7
];

B = [

    1 5 2 3
    6 7 8 9
];

for i=1:size(B)

s=s+(ismember(A, B(i,:), 'rows'))

end

A_B = A(s==0,:)