1

我正在研究 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

4 回答 4

2

setdiff'rows'and'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
于 2014-03-17T18:53:17.847 回答
1

使用ismember查找公共行并忽略 final 中的那些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
于 2014-03-17T18:52:43.063 回答
0

@Divakar@chappjc 的答案是要走的路。

但我忍不住邀请bsxfun参加聚会:

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

它的朋友pdist2也来了:

C = A(all(pdist2(A, B, 'hamming').'),:);
于 2014-03-17T19:25:22.883 回答
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,:)
于 2014-03-17T19:26:16.460 回答