movavg with custom type and weights
7 views (last 30 days)
Show older comments
I have difficulties using the movavg with custom type and weight. The minimum reproducible code is given below

It complained that the weight vector is not an array with all values <= 1 but isn't B clearly fulfil this criteria? Or am I missing something?
1 Comment
Jan
on 29 Jan 2023
Please post code as formatted text, not as screenshot. Then it is much easier to re-use it by copy&paste.
Answers (3)
Bruno Luong
on 29 Jan 2023
Edited: Bruno Luong
on 29 Jan 2023
movavg requires first array is a column vector or matrix
A = 1:5;
B = [0.5 0.5];
movavg(A(:), "custom", B)
% or reshape back
reshape(movavg(A(:), "custom", B), size(A))
movavg(A, "custom", B) % error
The error message is for sure misleading.
Furthermore according to the doc
"To compute moving average with custom weights, the weights (w) are first normalized such that they sum to one:
W(i) = w(i)/sum(w), for i = 1,2,...,N"
Not serious TMW on document-error handling this function.
0 Comments
Image Analyst
on 29 Jan 2023
Edited: Image Analyst
on 29 Jan 2023
I never heard of movavg - I guess it's only in the Financial Toolbox. You can use conv or movmean instead:
A = [1,2,3,4,5]; % Data to be filtered
B = [0.5, 0.5]; % Weights
C = conv(A, B, 'valid')
% or use movmean
C = movmean(A, 2)
Depending on what you want your output to be (how you want edge efects to be handled). Conv() works with any weights. Movmean only handles uniform weights as far as I know.
0 Comments
Sulaymon Eshkabilov
on 29 Jan 2023
In this case, it is better to use filter() that gives a good moving average filter solution:
A = 1:5;
B = [.5 .5 ];
Out_A = filter(B, 1, A)
0 Comments
See Also
Categories
Find more on Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!