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

 Respuesta aceptada

Nathaniel
Nathaniel el 25 de Mayo de 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 comentario

Ben
Ben el 27 de Mayo de 2012
Thanks so much! This is exactly what I needed to create.

Iniciar sesión para comentar.

Más respuestas (1)

Sean de Wolski
Sean de Wolski el 25 de Mayo de 2012
x2 = zeros(1,2*numel(x)); %thanks Andrei!
x2(1:2:end) = x;
Or:
reshape([x;zeros(size(x))],1,[])

2 comentarios

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

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Preguntada:

Ben
el 25 de Mayo de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by