【问题标题】:Find and Exclude one Matrix from other从另一个矩阵中查找并排除一个矩阵
【发布时间】:2014-03-17 18:49:58
【问题描述】:
我正在研究 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
];
【问题讨论】:
标签:
matlab
matrix
discrete-mathematics
set-difference
【解决方案1】:
将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
【解决方案2】:
使用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
【解决方案3】:
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,:)
【解决方案4】:
@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').'),:);