フィルターのクリア

Creating averages for parts of an array in a for loop

1 回表示 (過去 30 日間)
Jack Upton
Jack Upton 2019 年 11 月 26 日
コメント済み: Stephen23 2019 年 11 月 26 日
Hi,
I have 200 instances of data within an array and I would like to create a (mean) average using the last 5 instances of data for every data point.
The code I am currently using to manually do this is as follows:
a1=mean(a(1)); A1=a(1)-a1;
a2=mean(a(1:2)); A2=a(2)-a2;
a3=mean(a(1:3)); A3=a(3)-a3;
a4=mean(a(1:4)); A4=a(4)-a4;
a5=mean(a(1:5)); A5=a(5)-a5;
a6=mean(a(2:6)); A6=a(6)-a6;
a7=mean(a(3:7)); A7=a(7)-a7;
a8=mean(a(4:8)); A8=a(8)-a8;
a9=mean(a(5:9)); A9=a(9)-a9;
a10=mean(a(6:10)); A10=a(10)-a10;
Is there anyway I could use a for loop to drastically reduce the amount of code needed?
Thanks in advance,
Jack
  1 件のコメント
Stephen23
Stephen23 2019 年 11 月 26 日
編集済み: Stephen23 2019 年 11 月 26 日
"Is there anyway I could use a for loop to drastically reduce the amount of code needed?"
Using numbered variables is entirely the wrong way to go about this task.
Using numbered variables is a sign that you are doing something wrong, and are not taking advantage of MATLAB's strengths (processing arrays, indexing, etc.).
Copy-and-pasting code is also a sign that you are doing something wrong.

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

回答 (1 件)

Stephen23
Stephen23 2019 年 11 月 26 日
編集済み: Stephen23 2019 年 11 月 26 日
Your definitions of the boundary cases make this a bit tricky, but here is one solution:
>> A = randi(9,1,10)
A =
3.00 2.00 2.00 2.00 3.00 6.00 8.00 1.00 8.00 2.00
>> F = @(n)mean(A(max(1,n-N+1):n));
>> M = arrayfun(F,1:numel(A))
M =
3.00 2.50 2.33 2.25 2.40 3.00 4.20 4.00 5.20 5.00
You could also use conv , although you would need to handle the boundary cases yourself.
  2 件のコメント
Jack Upton
Jack Upton 2019 年 11 月 26 日
編集済み: Jack Upton 2019 年 11 月 26 日
Sorry this is the full code, with boundary cond.
X=csvread('NoiseX01s20s.csv');
t=X(:,1); %Time Values
g=X(:,2); %Acceleration Values
a=g*9.81; %convert to m/s^2
a1=mean(a(1)); A1=a(1)-a1;
a2=mean(a(1:2)); A2=a(2)-a2;
a3=mean(a(1:3)); A3=a(3)-a3;
a4=mean(a(1:4)); A4=a(4)-a4;
a5=mean(a(1:5)); A5=a(5)-a5;
a6=mean(a(2:6)); A6=a(6)-a6;
a7=mean(a(3:7)); A7=a(7)-a7;
a8=mean(a(4:8)); A8=a(8)-a8;
a9=mean(a(5:9)); A9=a(9)-a9;
a10=mean(a(6:10)); A10=a(10)-a10;
I have managed to calculate the moving average using the conv command, is there now a way to calculate the rate of change of conv?
Stephen23
Stephen23 2019 年 11 月 26 日
"is there now a way to calculate the rate of change of conv"
It is not clear what "rate of change of conv" means. Perhaps you want diff.

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

製品

Community Treasure Hunt

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

Start Hunting!

Translated by