# Adding Zeroes and Ones into a Vector

1 view (last 30 days)
Hollis Williams on 19 May 2019
Edited: dpb on 22 May 2019
I have a 1x300 vector and would like to make it into a 1x400 vector by inserting a 0 after every third element, a 0 after every sixth element and a 1 after the ninth element and then after the twelfth element insert a 0 and repeat the pattern.
So for example if I have
0 0 1 0 1 0 1 0 0
this would become
0 0 1 0 0 1 0 0 1 0 0 1
and so on.

dpb on 19 May 2019
Edited: dpb on 22 May 2019
>> v=reshape([reshape(v,[],3),[0 0 1].'].',1,[])
v =
0 0 1 0 0 1 0 0 1 0 0 1
>>
To generalize, repmat the augmentation vector as many times as needed.
>> v=reshape([reshape(v,[],3),repmat([0 0 1].',numel(v)/9,1)].',1,[])
v =
0 0 1 0 0 1 0 0 1 0 0 1
>>
ADDENDUM: To make the generalizaton more clear perhaps...
lenStr=3; % length prior to insertion point
vaug=[0 0 1].'; % the augmenting vector
lenAug=numel(vaug); % length of augmentation vector
v=reshape([reshape(v,[],lenStr),repmat(vaug,numel(v)/(lenStr*lenAug),1)].',1,[])

dpb on 21 May 2019
Alone, yes. In patterns as you've outlined "not so much" because the positions change with the insertion when you insert after element 3, now 4 is 5 so then you've got to recompute.
That's what the above avoids.
Hollis Williams on 21 May 2019
The code above didn't seem to give the desired result. Let's just simplify and say that I have a 1x108 vector and after every third vector I just went to inset a 1 so that I end up with a 1x144 vector, what would be the simple way of doing this?
dpb on 21 May 2019
Same logic works with the augmentation vector being only 1 element, too:
reshape([reshape(v,[],3) ones(108/3,1)].',1,[])
You just have to compute the repeat factor correctly dependent upon the length being added--how many rows does it add each time?
The above with the hardcoded '9' was specific for the original question of 3.