在matlab中搜索元胞数组

search in cell array in matlab

在 matlab 中,我创建了一个包含不同大小数组的单元格。例如:

group{1} = [2;3;4];
group{2} = [4;5];
group{3} = [2;4;11;5;7];

我要找到元素并删除它们。如果我搜索“4”,那么结果应该如下所示:

group{1} = [2;3];
group{2} = [5];
group{3} = [2;11;5;7];

如何在 matlab 中实现?我试过 find, ismember, [group{:}] .

  1. 您可以使用setdiff:

    remove = 4; %// may be a single value or a vector
    group = cellfun(@(x) setdiff(x,remove,'stable'), group, 'UniformOutput', 0);
    

    setdiff中的'stable'选项用于保持原始元素顺序。

  2. 或者,使用 ismember:

    remove = 4; %// may be a single value or a vector
    group = cellfun(@(x) x(~ismember(x,remove)), group, 'UniformOutput', 0);
    
  3. 可能更快:如果您只想删除一个值,只需使用索引:

    remove = 4; %// just one value
    group = cellfun(@(x) x(x~=remove), group, 'UniformOutput', 0);