Hi all
i have an array V=1x115 i want to create another array which contains the mean value neatly of the first 8 V values than of the subsequent 8 and so on... in pratical terms: mean(V(1:8)), mean(V(8:16)),...mean(V(112:end))
Thank you for the help
Regards

2 件のコメント

Adam Danz
Adam Danz 2020 年 8 月 22 日
編集済み: Adam Danz 2020 年 8 月 22 日
1:8 contains 8 values.
8:16 contains 9 values.
If you meant to write 1:8 and 8:15 (each containing 8 values), see my answer.
If you meant to write 1:8, 9:16 (each containing 8-values), see the link at the top of my answer.
If your window sizes vary, you'll need to explain your problem with more detail.
EldaEbrithil
EldaEbrithil 2020 年 8 月 22 日
Thank you Adam
I solved the problem thanks to your upper link, now i understand the logic for the moving average
Regards

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

 採用された回答

Adam Danz
Adam Danz 2020 年 8 月 22 日
編集済み: Adam Danz 2020 年 8 月 22 日

0 投票

The answer in this link computes segmented averages as you describe except instead of averaging 1:8, 8:15, ... , it averages 1:8, 9:16, ..., .
Solution
To replicate the edges, you just have to add three line.
The full solutions is shown in this demo.
data = 1:22; % Demo data
winSz = 5; % Window size; winSz=5 results in indices of (1:5, 5:9, 9:13, ...)
replications = repmat([2;ones(winSz-2,1)],ceil(numel(data)/(winSz-1)),1);
dataPrep = repelem(data(:),replications(1:numel(data)));
dataPrep(1) = []; % do not duplicate 1st datapoint
% Reshape dataPrep into matrix.
% NOTE: 'dataPrep' must contain a number of element divisibly by 'winSz'.
% Otherwise, 'dataPrep' will be padded with NaN values so that it is
% divisible by 'winSz'.
if rem(numel(dataPrep),winSz)>0
nanAppend = nan(winSz - rem(numel(dataPrep),winSz),1);
else
nanAppend = [];
end
dataMat = reshape([dataPrep; nanAppend], winSz, []);
movingAverage = mean(dataMat,1,'Omitnan');
Results
The original data:
data =
Columns 1 through 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Columns 21 through 22
21 22
The blocked version where means are computed over each column
dataMat =
1 5 9 13 17 21
2 6 10 14 18 22
3 7 11 15 19 NaN
4 8 12 16 20 NaN
5 9 13 17 21 NaN
The means (within a 5-element window)
movingAverage =
3 7 11 15 19 21.5

3 件のコメント

EldaEbrithil
EldaEbrithil 2020 年 8 月 22 日
Thank you Adam!! This is brilliant!!
Adam Danz
Adam Danz 2020 年 8 月 22 日
編集済み: Adam Danz 2020 年 8 月 22 日
Socially distant high five!
EldaEbrithil
EldaEbrithil 2020 年 8 月 22 日
Ahahah xD

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Particle & Nuclear Physics についてさらに検索

製品

リリース

R2019a

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by