# How to group an array and then replace each group with different numbers?

1 view (last 30 days)
Rikke on 20 Mar 2019
Commented: Rikke on 20 Mar 2019
Example of array: A = [1 1 1 0 0 0 1 0 0 1 0 1 1 0 0 ];
Wanted array: B = [1 1 1 4 4 4 1 5 5 1 6 1 1 3 3];
Is is possible to separate each group of zeros in A and then replace each group with a number in another array?
First group of zeros is the first three zeros in A, g1=[0, 0, 0];
Second group: g2=[0, 0];
and so on.
Then i want to replace each group with C = [4, 5, 6, 3];
The result will be g1 = [4, 4, 4], g2 = [5, 5] and so on.

Andrei Bobrov on 20 Mar 2019
B = A;
B(A==0) = repelem(C,diff(reshape(find(diff([1,A,1]) ~= 0),2,[])));
Luna on 20 Mar 2019
+1 for blowing mind!
Rikke on 20 Mar 2019
Brilliant, thank you!

Luna on 20 Mar 2019
Try this:
A = [1 1 1 0 0 0 1 0 0 1 0 1 1 0 0];
C = [4, 5, 6, 3];
A(end+1) = 1;
locRise = find([0 diff(A == 0) > 0]);
locFall = find([diff(A==0) < 0 0]);
for i = 1:numel(locRise)
A(locRise(i):locFall(i)) = C(i);
end
A(end) = [];
Note: number of groups of zeros should be same with the length of C.
Rikke on 20 Mar 2019
Perfect, thank you!