Divide an array in areas based on its values
Ältere Kommentare anzeigen
Suppose that I want find the edges of ones and of not ones such that I can divide an in areas the array. Suppose the array is as the example below:
a=[1 1 1 1 1 1 12 10 1 1 1 1 1 11 12 1 1 1 2 3]
a(1:6) -->area1 of ones
a(7:8) -->area1 of not ones
a(9:a13) -->area2 of ones
a(14:15)-->area2 of not ones
a(16:19)-->area3 of ones
a(20) -->area3 of not ones
and so on..
Akzeptierte Antwort
Weitere Antworten (2)
Andrei Bobrov
am 28 Mai 2013
a=[1 1 1 1 1 1 12 10 1 1 1 1 1 11 12 1 1 1 2 3 ];
a1 = a == 1;
ii = [true, diff(a1)~=0];
idx = cumsum(ii);
out = accumarray(idx(:),a(:),[],@(x){x});
Giorgos Papakonstantinou
am 28 Mai 2013
0 Stimmen
3 Kommentare
Image Analyst
am 28 Mai 2013
Bearbeitet: Image Analyst
am 28 Mai 2013
Please transfer this "Answer" to the other "Answer" (the one you thought you were responding to) as a comment. No one knows if you're talking to Azzi, whose answer you accepted, or Andrei, who has the shorter answer. Though I do agree with you that any compact, cryptic code could be helped with explanation/comments.
Giorgos Papakonstantinou
am 28 Mai 2013
Andrei Bobrov
am 29 Mai 2013
Please read the description of the three functions in the MATLAB documentation: diff, cumsum, accumarray.
Kategorien
Mehr zu Logical finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!