Adding zeroes to Row Vector using a script

1 view (last 30 days)
I wanted to create a script, which would insert "m" amount of zeroes just after every "M-th" element of a given vector, x, to create a new vector. Ie: x = [1 2 3 4 5 6] for instance.
The input would use y = zero_insertion(x,M,m)
Code so far: function y = zero_insertion(x,M,m) a = zeros(1,m) w = x(1:M) y = [w a]
and that will get me a row vector with that has up to the M-th element and the number of "m" zeroes afterwards. However, I just can't figure out how to make a loop to do that for every "M-th" element, and I also can't retrieve the rest of my original vector.
x = [1 2 3 4 5 6] for instance.
Example: If input was y = zero_insertion([1 2 3 4 5 6],1,1) then result would be [1 0 2 0 3 0 4 0 5 0 6 0]
How would I do this? Thanks for your assistance

Accepted Answer

Nathaniel
Nathaniel on 25 May 2012
It would be simple if you guaranteed that numel(x)/M is always an integer, but without that guarantee:
function y = zero_insertion(x,M,m)
modxm = mod(numel(x),M);
padding = logical(modxm)*M-modxm;
newx = reshape([x NaN(1,padding)],M,[]);
y1 = [newx ; zeros(m, size(newx,2))];
y2 = reshape(y1,1,[]);
y = y2(1:(numel(y2)-logical(padding)*(padding+m)));
Or if you want to keep the zeros even if numel(x)/M isn't an integer, the last line is:
y = y2(~isnan(y2));
  1 Comment
Ben
Ben on 27 May 2012
Thanks so much! This is exactly what I needed to create.

Sign in to comment.

More Answers (1)

Sean de Wolski
Sean de Wolski on 25 May 2012
x2 = zeros(1,2*numel(x)); %thanks Andrei!
x2(1:2:end) = x;
Or:
reshape([x;zeros(size(x))],1,[])
  2 Comments
Andrei Bobrov
Andrei Bobrov on 25 May 2012
Hi Sean! Small typo
x2 = zeros(1,2*numel(x));
x2(1:2:end) = x;

Sign in to comment.

Categories

Find more on Programming in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!