split binary array based on value 1
Afficher commentaires plus anciens
Hi,
I have a binary array that I would like to split up into several others, each starting with a '1'. I almost have it to work, except the sizes do not match and mat2cell does not work. Please help me with the last bit, thanks!
Jasper
a = [ 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]';
indices = find(a(:,1)~= 0); % gives 1,5,11,16 and is correct
sizes = diff([indices' size(a, 1)]);% gives 4,6,5,13 instead of 4,6,5,14!
mat2cell(a, sizes, size(a, 1)); % fail!
Réponse acceptée
Plus de réponses (2)
Image Analyst
le 31 Août 2015
I don't see any splitting going on - it's not splitting the array into multiple other arrays. What I see is you counting the zeros and ones as a unit. If you have the Image Processing toolbox, you can just find the sizes of the 0's and add 1:
a = [ 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]';
labeledArray = bwlabel(a==0);
measurements = regionprops(labeledArray, 'Area');
lengths = [measurements.Area]+1
In the command window:
lengths =
4 6 5 14
Azzi Abdelmalek
le 31 Août 2015
a = [ 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]';
ii1=strfind(a',[1 0]);
ii2=strfind([a' 1],[0 1]);
out=arrayfun(@(x,y) a(x:y),ii1,ii2,'un',0);
celldisp(out)
Catégories
En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!