MATLAB Answers

Rikke
0

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

Asked by Rikke
on 20 Mar 2019
Latest activity Commented on by 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.

  0 Comments

Sign in to comment.

2 Answers

Answer by Andrei Bobrov
on 20 Mar 2019
 Accepted Answer

B = A;
B(A==0) = repelem(C,diff(reshape(find(diff([1,A,1]) ~= 0),2,[])));

  2 Comments

+1 for blowing mind!

Sign in to comment.


Answer by 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.

  1 Comment

Sign in to comment.