Adding Zeroes and Ones into a Vector
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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.
0 Kommentare
Akzeptierte Antwort
dpb
am 19 Mai 2019
Bearbeitet: dpb
am 22 Mai 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,[])
6 Kommentare
dpb
am 21 Mai 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.
Weitere Antworten (1)
Jos (10584)
am 21 Mai 2019
Inserting elements at specific locations is not trivial. Years ago I wrote a function INSERTROWS that does this
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!