moving averege of a matrix
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Hi!
a have a matrix:
%
A=[2 5 6 8 7 ;2 2 3 5 6; 1 2 3 4 2]
how could i calculate the moving averege (order 2) of the matrix horizentally, i mea the vectors a1= [2 5 6 8 7] and a2=[2 2 3 5 6] a3=[1 2 3 4 2] are indepandent .
the moving averege of each vector?
thank you
0 comentarios
Respuesta aceptada
Andrei Bobrov
el 6 de Mzo. de 2013
out = conv2(A,[.5 .5],'same');
out(:,1:end-1);
2 comentarios
Daniel Shub
el 6 de Mzo. de 2013
For an A of 1e3 x 1e5, it appears that Jan's direct method is faster, but if you are not worried about the edge, then your method is faster.
Más respuestas (2)
Jan
el 6 de Mzo. de 2013
Editada: Jan
el 7 de Mzo. de 2013
A = [2 5 6 8 7 ;2 2 3 5 6; 1 2 3 4 2];
B = (A(:, 1:4) + A(:, 2:5)) * 0.5;
This is one column shorter than the input, but how is the moving average defined at the edges?
[EDITED] A hard coded moving average for 5 neighboring elements along the rows:
[d1, d2] = size(X);
Z1 = zeros(d1, 1);
Z2 = zeros(d1, 2);
M = X + [Z1, X(:, 1:d1 - 2) + X(:, 3:d1), Z1] + ...
[Z2, X(:, 1:d1 - 4) + X(:, 5:d1), Z2];
divV(1, [1, 2, d1 - 1, d1]) = [1, 3, 3, 1];
divV(1, 3:d1 - 2) = 5;
Y = bsxfun(@rdivide, M, div);
Here the first element is not changed and the 2nd is the average of the elements 1 to 3. I do not assume that this can beat CONV.
3 comentarios
Jan
el 6 de Mzo. de 2013
Too big for what? Why is the first value unchanged and what exactly is "the first value"?
Image Analyst
el 6 de Mzo. de 2013
Moving how? In an m by n window? Or do you simply want the average of the entire row, in which case you can do this:
rowAverages = mean(A, 2);
1 comentario
Image Analyst
el 7 de Mzo. de 2013
Rica, if you want the mean of 5 horizontal numbers in a 27 by 302,528 matrix, you can do this:
means = conv2(yourArray, [1 1 1 1 1]/5, 'valid');
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!