find element in cell

Dear all, I've problem with the cell,
a= {[67 8 33] [1 2 3 5] [2 88 5] [3 66 7 90] [3] [66 78 12 1 44 6 77 3]},
how to find each cell have number 3. answer expect it is:
b= {[1 2 3 5] [3 66 7 90] [3] [66 78 12 1 44 6 77 3]}
thanks all

Answers (2)

dbmn
dbmn on 12 Jul 2017
An alternative to KSSVs solution would be this one liner
b = a(cellfun(@(x) sum(x==3)>0, a));

3 Comments

KSSV
KSSV on 12 Jul 2017
cellfun also uses loop inside...
The result of sum(x==3)>0 is unclear, when the cell element is the empty matrix. What about:
b = a(cellfun(@(x) any(x==3), a));
dbmn
dbmn on 13 Jul 2017
Nice, using "any" there is a really neat idea.

Sign in to comment.

KSSV
KSSV on 12 Jul 2017
a= {[67 8 33] [1 2 3 5] [2 88 5] [3 66 7 90] [3] [66 78 12 1 44 6 77 3]} ;
b= {[1 2 3 5] [3 66 7 90] [3] [66 78 12 1 44 6 77 3]} ;
iwant = cell([],1) ;
count = 0 ;
for i = 1:length(a)
if any(a{i}==3)
count = count+1 ;
iwant{count} = a{i} ;
end
end
iwant

Categories

Asked:

on 12 Jul 2017

Commented:

on 13 Jul 2017

Community Treasure Hunt

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

Start Hunting!