remove rows that contain zeros from cells array in matlab

2 Ansichten (letzte 30 Tage)
Jwana
Jwana am 25 Okt. 2012
I have a cell array resulted from a certain code as follows:
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'
I need to remove the rows which contains zero (for example: in the above cells array m, row one should be deleted because we have a zero in the first column). so how can I create an array from this array that doesn't contain zeros?

Akzeptierte Antwort

Matt Fig
Matt Fig am 25 Okt. 2012
m(cellfun(@(x) ~x(1),m(:,1)),:) = []

Weitere Antworten (3)

Jan
Jan am 25 Okt. 2012
Bearbeitet: Jan am 25 Okt. 2012
If efficiency matters, it should be considered, than cellfun is slow when operating on anonymous functions. Functions handles are better, but the built-in string functions are really fast:
idx = cellfun('isclass', c, 'char');
c = c(idx, :);
What a pitty that TMW hides them in the documentation instead of mentioning their efficiency.

Matt J
Matt J am 25 Okt. 2012
Bearbeitet: Matt J am 25 Okt. 2012
I'm assuming the zeros would only appear in the first column (it seems so from your example), but the following is easily modified if not,
idx=cellfun(@(c) isequal(c,0), m(:,1));
m(idx,:)=[];

Azzi Abdelmalek
Azzi Abdelmalek am 25 Okt. 2012
out=m(all(cellfun(@any,m),2),:)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by