moving averege of a matrix

1 次查看(过去 30 天)
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

采纳的回答

Andrei Bobrov
Andrei Bobrov 2013-3-6
out = conv2(A,[.5 .5],'same');
out(:,1:end-1);
  2 个评论
Andrei Bobrov
Andrei Bobrov 2013-3-6
out = [A(:,1),conv2(A,[.5 .5],'valid')];
Daniel Shub
Daniel Shub 2013-3-6
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.

请先登录,再进行评论。

更多回答(2 个)

Jan
Jan 2013-3-6
编辑:Jan 2013-3-7
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 个评论
Jan
Jan 2013-3-6
Too big for what? Why is the first value unchanged and what exactly is "the first value"?
Rica
Rica 2013-3-7
my matrix is of the size 27*301528. i want the moving averege of each raw. the size of zhe window should be 5. that means or the first 5 value , i build the mean value with the mean function. from the sixth value should the moving averege start.
i am tryin now to use filter2, but i will be happy for other advices.
thank you

请先登录,再进行评论。


Image Analyst
Image Analyst 2013-3-6
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 个评论
Image Analyst
Image Analyst 2013-3-7
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');

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Operators and Elementary Operations 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by