Extract runs of values from cell array
2 views (last 30 days)
Show older comments
Alexander Collins
on 17 Jun 2021
Commented: Alexander Collins
on 17 Jun 2021
I have a cell array containing many empty cells, the occasional isolated value surrounded by empty cells, and a few runs of values in consecutive cells. e.g.:
C = {[] [] 107 [] [] [] [] [] [] [] [] [] 60 79 98 117 [] []}
Is there a way to pull out only those cells that form part of a run of values?
i.e.
B = {60 79 98 117}
0 Comments
Accepted Answer
KSSV
on 17 Jun 2021
iwant = C(~cellfun('isempty',C))
3 Comments
KSSV
on 17 Jun 2021
C = {[] [] 107 [] [] [] [] [] [] [] [] [] 60 79 98 117 [] []} ;
idx = cellfun(@isempty,C) ;
C(idx) = {NaN} ;
C = cell2mat(C) ;
ii = zeros(size(C));
jj = C > 0;
ii(strfind([0,jj(:)'],[0 1])) = 1;
idx = cumsum(ii).*jj;
out = accumarray( idx(jj)',C(jj)',[],@(x){x'});
celldisp(out)
Reference: https://in.mathworks.com/matlabcentral/answers/104614-grouping-continuous-nonzero-in-a-row-vector
You may pick the cell which has more than one element.
More Answers (0)
See Also
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!