Adding Zeroes and Ones into a Vector
4 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
dpb
2019 年 5 月 19 日
編集済み: dpb
2019 年 5 月 22 日
>> 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 件のコメント
dpb
2019 年 5 月 21 日
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.
その他の回答 (1 件)
Jos (10584)
2019 年 5 月 21 日
Inserting elements at specific locations is not trivial. Years ago I wrote a function INSERTROWS that does this
0 件のコメント
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!