Adding zeroes to Row Vector using a script

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

 Akzeptierte Antwort

Nathaniel
Nathaniel am 25 Mai 2012

0 Stimmen

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 Kommentar

Ben
Ben am 27 Mai 2012
Thanks so much! This is exactly what I needed to create.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sean de Wolski
Sean de Wolski am 25 Mai 2012

0 Stimmen

x2 = zeros(1,2*numel(x)); %thanks Andrei!
x2(1:2:end) = x;
Or:
reshape([x;zeros(size(x))],1,[])

2 Kommentare

Andrei Bobrov
Andrei Bobrov am 25 Mai 2012
Hi Sean! Small typo
x2 = zeros(1,2*numel(x));
x2(1:2:end) = x;
Sean de Wolski
Sean de Wolski am 25 Mai 2012
yup, thanks Andrei!

Melden Sie sich an, um zu kommentieren.

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by