Moving average with overlapping windows
9 次查看(过去 30 天)
显示 更早的评论
Hi,
I am looking for an efficient way to compute a moving average with overlapping windows for a matrix X along the first dimension.
A non-efficient solution is the following.
N = 3500000;
X = randn(N,20);
windowSize = 600;
stepSize = 100;
b = (1/windowSize)*ones(1,windowSize);
a = 1;
windowEnd = windowSize:stepSize:N-windowSize+1;
tic
X = filter(b,a,X) ;
X = X(windowEnd) ;
toc
In this solution, I am computing a lot of averages that I am throwing away at the end... This is what I meant by 'non-efficient'.
Thank you in advance for your help.
0 个评论
回答(1 个)
Image Analyst
2016-3-25
You can use blockproc() to move a 600x600 window along a matrix in "jumps" of 100. Look at all the arguments and let us know if you can't figure it out.
2 个评论
Image Analyst
2016-3-25
编辑:Image Analyst
2016-3-25
You can use conv2() or imfilter(). They are very efficient and fast and highly optimized. However, they don't move in "jumps" of 100, they move by 1 pixel so they do a lot more computations. Whether it will be faster or not is for you to test.
tic;
kernel = ones(101) / 101^2;
blurredImage = conv2(X, kernel, 'same');
elapsedSeconds = toc
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!