Borrar filtros
Borrar filtros

Averaging sections of a vector

4 visualizaciones (últimos 30 días)
Thishan Dharshana Karandana Gamalathge
Comentada: Andrei Bobrov el 28 de Jul. de 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.

Respuesta aceptada

Steven Lord
Steven Lord el 28 de Jul. de 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 comentario
Andrei Bobrov
Andrei Bobrov el 28 de Jul. de 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
>>

Iniciar sesión para comentar.

Más respuestas (1)

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

Categorías

Más información sobre Numeric Types en Help Center y File Exchange.

Etiquetas

Aún no se han introducido etiquetas.

Community Treasure Hunt

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

Start Hunting!

Translated by