簡體   English   中英

從matlab中的單元格數組中刪除包含零的行

[英]remove rows that contain zeros from cells array in matlab

我有一個由某個代碼產生的單元格數組如下:

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'

我需要刪除包含零的行(例如:第一行應該被刪除,因為我們在第一列中有一個零)。 那么如何從這個不包含零的數組創建一個數組呢?

你可以在漂亮的單行中做到這一點:

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.
  zerosLocation = cellfun(@(x)isEqual(x, 0 ) , m);
  zeroRows = any(zerosLocation,2);
  m(zeroRows,:) = [];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM