【问题标题】:remove rows that contain zeros from cells array in matlab从matlab中的单元格数组中删除包含零的行
【发布时间】:2012-10-25 14:55:07
【问题描述】:

我有一个由某个代码产生的单元格数组,如下所示:

m = 

    [         0]    'GO:0008150'
    'GO:0008150'    'GO:0016740'
    'GO:0016740'    'GO:0016787'
    'GO:0016787'    'GO:0006810'
    'GO:0008150'    'GO:0006412'
    'GO:0016740'    'GO:0004672'
    'GO:0016740'    'GO:0016779'
    'GO:0016787'    'GO:0004386'
    'GO:0016787'    'GO:0003774'
    'GO:0016787'    'GO:0016298'
    'GO:0006810'    'GO:0016192'
    'GO:0006412'    'GO:0005215'
    'GO:0004672'    'GO:0030533'
    [         0]    'GO:0008150'
    [         0]    'GO:0016740'
    'GO:0008150'    'GO:0016787'
    'GO:0008150'    'GO:0006810'
    'GO:0006810'    'GO:0006412'
    [         0]    'GO:0004672'
    [         0]    'GO:0016779'
    [         0]    'GO:0004386'
    'GO:0016192'    'GO:0003774'
    [         0]    'GO:0016298'
    [         0]    'GO:0016192'
    'GO:0006810'    'GO:0005215'
    'GO:0005215'    'GO:0030533'

我需要删除包含零的行(例如:应该删除第一行,因为我们在第一列中有一个零)。 那么如何从这个不包含零的数组创建一个数组呢?

【问题讨论】:

  • 从您的示例中,正如@Rody Oldenhuis 隐含强调的那样,这更适合于查找 chardouble 而不是零与非零)

标签: matlab cells


【解决方案1】:

你可以在一个漂亮的单行中做到这一点:

m(any(cellfun(@(x)x(1)==0, m),2), :) = []

或者:

m(any(~cellfun(@ischar, m),2), :) = []

这有点快。

如果您可以确定只有第一列会包含零,请使用

m = m(cellfun(@ischar, m(:,1)),:)

最后,你可以使用

m = m(cellfun('isclass', m(:,1), 'char'),:)

看起来“旧”,但实际上具有更高的性能。

在您的示例数组上测试这些一千次,给出

Elapsed time is 1.382801 seconds.
Elapsed time is 0.138519 seconds.
Elapsed time is 0.075245 seconds.
Elapsed time is 0.014674 seconds.

【讨论】:

    【解决方案2】:
      zerosLocation = cellfun(@(x)isEqual(x, 0 ) , m);
      zeroRows = any(zerosLocation,2);
      m(zeroRows,:) = [];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      相关资源
      最近更新 更多