【问题标题】:search in cell array in matlab在matlab中的单元格数组中搜索
【发布时间】:2015-01-22 23:52:34
【问题描述】:

在 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{:}] 。

【问题讨论】:

    标签: matlab cell


    【解决方案1】:
    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);
      

    【讨论】:

    • 效果很好。另一个问题:如何访问包含“删除”的组的索引。对于此示例 {1} {2} {3} 包含 4。
    • 您需要稍微修改cellfun 语句。例如,在第二种方法中,它将是 indices = find(cellfun(@(x) any(ismember(x,remove)), group))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多