フィルターのクリア

Moving average - for loop vectorization

2 ビュー (過去 30 日間)
Dawid Smolen
Dawid Smolen 2016 年 4 月 21 日
コメント済み: Stephen23 2018 年 12 月 5 日
Hello. I've got a problem that my loop doesn't execute fast enough, even though it is simple moving average. Is there any smart way to make it work faster? x is a huge array, and there is some indexing using : in every iteration, that's probably the reason.
len = length(x); % around 6000000
A = 1/200;
for n = 100+1:len-100
MA = A*sum(x(n - 100: n + 100));
% Do something with MA. However I know that the above part is the slow one
end
I was trying to find some information about vectorization, but I can't see how could I apply these methods.

採用された回答

Stephen23
Stephen23 2016 年 4 月 21 日
編集済み: Stephen23 2016 年 4 月 21 日
To efficiently calculate a moving average you should use conv, something like this:
>> xi = 0:0.1:2*pi;
>> yi = sin(xi)+0.4*rand(size(xi))-0.2;
>> N = 4; % length of moving average
>> yo = conv(yi,ones(1,N),'same')/N;
>> plot(xi,yi, xi,yo)
  3 件のコメント
yari lazzaro
yari lazzaro 2018 年 12 月 4 日
Hi, do you know how this solution could be adapted in case I want to calculate a moving average along the rows of a matrix? Thanks
Stephen23
Stephen23 2018 年 12 月 5 日
@yari lazzaro: Use conv2 with a row vector.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by