Given a vector of assorted positive integers, how to create a vector with the means of every 2 integers inserted between each other?
Mostrar comentarios más antiguos
I've managed to take the mean of the whole vector with the mean function, but this doesn't seem like the right path to take. I am thinking of: v= 2 6 8 3 1 9 4 5 7 m1= v(1,2:9) m2= [m1,v(end)] m3= [v;m2] vmeans=mean(m2)
there are quite a few intermediate steps just to get to the vector of the means by themselves.
any answers to get to these values better or how to insert those values in between each original integer are much appreciated
thanx
Respuesta aceptada
Más respuestas (3)
David Young
el 9 de Jun. de 2011
result(1:2:2*length(v)-1) = v;
result(2:2:2*(length(v)-1)) = conv(v, [1 1]/2, 'valid')
Andrei Bobrov
el 9 de Jun. de 2011
m2 = v([2:end,end]);
m3 = [v;m2];
vmeans = mean(m2);
EDIT
vout = reshape([v;conv(v,[1 1],'valid')/2 0],1,[]);
vout = vout(1:end-1);
more only it case
vout = interp1(1:length(v),v,1:.5:length(v));
4 comentarios
Adam Quintero
el 9 de Jun. de 2011
Andrei Bobrov
el 9 de Jun. de 2011
what is it vmeanof1-2? it mean(v(1:2)) or ..?
Adam Quintero
el 9 de Jun. de 2011
David Young
el 9 de Jun. de 2011
It's more efficient to divide the mask in the convolution by 2, rather than dividing the result of the convolution by 2.
linspace is preferable to using the colon operator if the output needs to be a definite length and the increment is not an integer.
David Young
el 9 de Jun. de 2011
v= [2 6 8 3 1 9 4 5 7]; % data
m = (v(1:end-1)+v(2:end))/2;
t = [v; [m 0]];
t = t(:);
result = t(1:end-1).'
Categorías
Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!