Mean value of a subarray

7 Ansichten (letzte 30 Tage)
EldaEbrithil
EldaEbrithil am 22 Aug. 2020
Kommentiert: EldaEbrithil am 22 Aug. 2020
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 Kommentare
Adam Danz
Adam Danz am 22 Aug. 2020
Bearbeitet: Adam Danz am 22 Aug. 2020
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 am 22 Aug. 2020
Thank you Adam
I solved the problem thanks to your upper link, now i understand the logic for the moving average
Regards

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Adam Danz
Adam Danz am 22 Aug. 2020
Bearbeitet: Adam Danz am 22 Aug. 2020
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 Kommentare
Adam Danz
Adam Danz am 22 Aug. 2020
Bearbeitet: Adam Danz am 22 Aug. 2020
Socially distant high five!
EldaEbrithil
EldaEbrithil am 22 Aug. 2020
Ahahah xD

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by