Create a moving average
24 次查看(过去 30 天)
显示 更早的评论
Hi There, How can I calculate a moving average for a column of data. For instance i want to average the 50 points either side of each data point in my column. Thanks
1 个评论
arman arefi
2020-3-27
You can use Moving Average Function in the FileExchange. Please find the link below:
采纳的回答
Andrei Bobrov
2013-6-28
A - your data
L = filter(ones(101,1)/101,1,[A(:) zeros(50,1)]);
out = L(51:end);
0 个评论
更多回答(5 个)
Image Analyst
2013-6-28
编辑:Image Analyst
2013-6-28
For a 1D column vector:
movingAverage = conv(yourSignal, ones(101,1)/101, 'same');
For a 2D array of columns:
movingAverage = conv2(yourSignal, ones(101,1)/101, 'same');
If you don't want the central pixel to be included in the average and have ONLY the 50 on either side, use
kernel = ones(101,1)/100;
kernel(51) = 0;
movingAverage = conv(yourSignal, kernel, 'same');
Same for a 2D matrix except use conv2 instead of conv. conv() and conv2() are highly optimized and very fast.
4 个评论
Nuchto
2017-11-30
So you could use ones(101,1) first, and onces it is convolved you can divide by 101?
Grzegorz Knor
2017-4-7
编辑:Adam Danz
2021-9-19
1 个评论
Image Analyst
2017-4-7
True, and it offers some edge handling options ('shrink', 'discard', 'fill') that conv2() does not have.
conv2() also does not require any toolboxes because it's in base MATLAB.
Marc
2013-6-28
If you have the financial toolbox, doc movavg()....
[Short, Long] = movavg(Asset, Lead, Lag, Alpha)
0 个评论
the cyclist
2013-6-28
This page of the MATLAB documentation has an example of using the filter() command to calculate a moving average:
Jan
2013-6-28
There are many moving average filters in the FileExchange. Whenever a standard problem occurs, looking in the FEX is a good idea:
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Regression 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!