Filter löschen
Filter löschen

Averaging sections of a vector

4 Ansichten (letzte 30 Tage)
Thishan Dharshana Karandana Gamalathge
Kommentiert: Andrei Bobrov am 28 Jul. 2017
A=[1 3 -999 -999 -999 -999 4 9 8 -999 -999 -999]; Here I want to get averages of three elements by ignoring -999. But in the final answer, if there were cases with three -999 in a given sector, it needs to be replaced by NaN. For an example, final answer of the above should B=[2 NaN 7 NaN]
Thanks.

Akzeptierte Antwort

Steven Lord
Steven Lord am 28 Jul. 2017
% Sample data
A=[1 3 -999 -999 -999 -999 4 9 8 -999 -999 -999];
% Replace the 'missing' -999 values with NaN
A(ismissing(A, -999)) = NaN;
% If you have a release that doesn't include ismissing, use ==
A(A == -999) = NaN;
% Take the mean, omitting NaN unless all the elements whose mean
% are being computed are NaN
M = mean(reshape(A, 3, []), 'omitnan')
  1 Kommentar
Andrei Bobrov
Andrei Bobrov am 28 Jul. 2017
% Sample data
>> A=[1 3 -999 3 -999 -999 4 9 8 9 -999 -999];
% Replace the 'missing' -999 values with NaN
A(ismissing(A, -999)) = NaN;
% If you have a release that doesn't include ismissing, use ==
A(A == -999) = NaN;
% Take the mean, omitting NaN unless all the elements whose mean
% are being computed are NaN
M = mean(reshape(A, 3, []), 'omitnan')
M =
2 3 7 9
>>

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Andrei Bobrov
Andrei Bobrov am 28 Jul. 2017
z = A;
z(z == -999) = nan;
t = ~isnan(z);
B = accumarray(cumsum(diff([~t(1);t(:)]) ~= 0),z,[],@mean);

Kategorien

Mehr zu Numeric Types finden Sie in Help Center und File Exchange

Tags

Noch keine Tags eingegeben.

Community Treasure Hunt

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

Start Hunting!

Translated by