如何在MATLAB中从cell数组A移除存在于B的行得到数组C?
解决MATLAB中Cell数组行差集的问题
要得到数组C(A中存在但B中不存在的行),可以利用MATLAB的ismember函数结合逻辑索引轻松实现,具体代码和解释如下:
% 定义原始cell数组A和B 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中不在B里的行的索引 is_in_B = ismember(A, B, 'rows'); % 取反索引并提取目标行得到C C = A(~is_in_B, :);
关键步骤解释:
ismember(A, B, 'rows'):这个函数会返回一个与A行数相同的逻辑数组,每一位对应A的一行——如果该行完整出现在B中,值为true,否则为false。'rows'参数是核心,它指定按整行匹配,而非逐个元素比对。~is_in_B:对逻辑数组取反,得到A中未出现在B里的行的索引。A(~is_in_B, :):通过逻辑索引提取这些行,最终得到的就是你需要的C数组。
运行代码后,C的结果完全符合预期:
C = 'U2' 'T15' 'A52' 'U2' 'T17' 'A995' 'U4' 'T18' 'A53'
内容的提问来源于stack exchange,提问作者kevin2019
相关产品推荐
相关产品推荐

