How do I calculate monthly mean of a 3-D matrix?

Hello all,
I have a 111x151x14243 matrix (lat, lon, time), called cmprecip, containing daily total precipitation data and I have a 14243x1 datetime array, called cmtime, in 'dd.MM:yyyy' format. I would like to calculate monthly mean from the daily data. So the output would be a 111x151x468 matrix. As a rookie in Matlab, my initial thought was to concatenate the matrix and the array and then use 'retime' just as I did before with 2-D arrays, but I was not able to make it work.
Is there a way to solve this issue? Thank you guys for your help in advance!
Levente

 Respuesta aceptada

jonas
jonas el 12 de Sept. de 2020
Using retime is one option, you would just have to shape your array into a timetable first, which is a bit of a hassle.
I think this should work as well
%some data
A = 1:10000;
A = reshape(A,10,10,100);
t = (linspace(datetime(2000,1,1),datetime(2005,1,1),100))';
%find unique month ids
[U,~,G] = unique([year(t),month(t)],'rows');
%preallocate output variable
out = nan(size(A,1),size(A,2),size(U,1));
%loop over months
for i = 1:size(U,1)
f = A(:,:,G==i);
out(:,:,i) = mean(f,3);
end

3 comentarios

Levente Samu
Levente Samu el 13 de Sept. de 2020
Thank you Jonas so much! It worked perfectly.
jonas
jonas el 13 de Sept. de 2020
My pleasure!
Ronald
Ronald el 8 de Abr. de 2024
Thanks Jonas for your answer. It solves my querry for 3D timeseries temporal reshaping. I will link it as an answer to my question too.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Preguntada:

el 12 de Sept. de 2020

Comentada:

el 8 de Abr. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by