我在A
中有一个单元格数组MATLAB
,如下所示
A = { 'U2', 'T13', 'A52';
'U2', 'T15', 'A52';
'U2', 'T18', 'A52';
'U2', 'T17', 'A995';
'U4', 'T18', 'A53';
'U4', 'T13', 'A64';
'U4', 'T18', 'A64';
}
我还有一个单元格数组B
如下:
B = { 'U2', 'T13', 'A52';
'U2', 'T18', 'A52';
'U4', 'T13', 'A64';
'U4', 'T18', 'A64';
}
如何生成单元格数组C
等于A
- B
:
C = { 'U2', 'T15', 'A52';
'U2', 'T17', 'A995';
'U4', 'T18', 'A53';
}
如何获得C
?
答案 0 :(得分:1)
此单行应符合您的目的:
C = A(sum(~ismember(A,B),2) > 0,:)
输出结果为:
C =
3×3 cell array
'U2' 'T15' 'A52'
'U2' 'T17' 'A995'
'U4' 'T18' 'A53'
基本上,A
中未找到的B
的行元素显示的行总和值大于0
。然后,该参考值用于生成捕获B
中不存在的元素的逻辑索引。
ismember函数有一个很好的重载,它接受rows
作为第三个输入参数,以便执行逐行匹配。这将真正简化此计算,但不幸的是,单元数组输入不支持它。
修改强>
A = {
'U2' 'T13' 'A52';
'U2' 'T15' 'A52';
'U2' 'T18' 'A52';
'U2' 'T17' 'A995';
'U4' 'T18' 'A53';
'U4' 'T13' 'A64';
'U4' 'T18' 'A64'
};
B = {
'U2' 'T13' 'A52';
'U2' 'T18' 'A52';
'U4' 'T13' 'A64';
'U4' 'T18' 'A64'
};
A_len = size(A,1);
A_keys = cell(A_len,1);
for i = 1:A_len
A_keys{i} = horzcat(A{i,:});
end
B_len = size(B,1);
B_keys = cell(B_len,1);
for i = 1:B_len
B_keys{i} = horzcat(B{i,:});
end
C = A(~ismember(A_keys,B_keys),:);
答案 1 :(得分:1)