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

17 views (last 30 days)
Levente Samu on 12 Sep 2020
Commented: Ronald on 8 Apr 2024 at 11:48
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
##### 0 CommentsShow -2 older commentsHide -2 older comments

Sign in to comment.

### Accepted Answer

jonas on 12 Sep 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 CommentsShow 1 older commentHide 1 older comment
jonas on 13 Sep 2020
My pleasure!
Ronald on 8 Apr 2024 at 11:48
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.

Sign in to comment.

### Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!