remove rows that contain zeros from cells array in matlab

8 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),:)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by