【问题标题】:MATLAB: Delete elements in cell array with certain lengthMATLAB:删除具有一定长度的单元格数组中的元素
【发布时间】:2015-04-24 06:36:20
【问题描述】:

如何删除单元格数组中少于例如 5 个元素的所有元素。

result{1}= 1
result{2}= [2 3 4 5 6 7 8]
result{3}= [9 10 11 12 13 14 16 17 18]
result{4}= [19 20 21]

在这个例子中我想删除result{1}result{4},因为它们里面的元素少于5个。

有了这个话题(matlab length of each element in cell array)我知道如何获取每个元素的长度,但是如何删除特定长度的元素呢?

【问题讨论】:

    标签: arrays matlab cell-array


    【解决方案1】:

    只需通过逻辑索引选择具有4个以上元素的那些:

    result = result(cellfun('length', result) >= 5);
    

    【讨论】:

      【解决方案2】:

      此代码将满足您的需求。但是 Mohsen 的上述回答非常紧凑和漂亮。

      result{1}= 1;
      result{2}= {2 3 4 5 6 7 8};
      result{3}= {9 10 11 12 13 14 16 17 18};
      result{4}= {19 20 21};
      
      i = 1;
      while i<=size(result,2)
          if size(result{i},2)<5
              result(i)=[];
          end
          i = i+1;
      end
      

      【讨论】:

      • 在 matlab 中不是很重要,但是 for 循环在这里看起来会更好。虽然你不能像在其他一些语言中那样限制循环变量的生命周期,但它至少表明我不会在循环范围之外使用。
      • @patrik,但是我可以在 Matlab 的 for 循环中减少我的索引变量 i 吗?
      • 你并不真正需要它,因为在 for 循环中你需要 for ( i = 1:size(result,2) )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2017-10-18
      • 2012-02-13
      • 1970-01-01
      相关资源
      最近更新 更多