MATLAB: Sum the daily data based on month and year

gridsum

I have a three dimensional matrix of gridded data (16x18x7669) where 16 is the latitudes, 18 the longitudes and 7669 is the daily data from 1/1/1998 to 31/12/2018. I would like to get the monthly and yearly totals for each grid. I am a newbie in Matlab and I will appreciate suggestions on how to go about it. Thank you in advance

Best Answer

Lets assume your 3D variable is called data
Frist get the group id : which width of data correspond to the same month of the same year:
time=datetime(1998,1,1):datetime(2018,12,31);
grp = findgroups(year(time),month(time));
Then cget the unique list of group
uniqueGr = unique(grp);
Initialize the result and loop on unique groupe element
result = zeros(size(data,1),size(data,2),numel(uniqueGr)) ;
for iGroup = 1:numel(uniqueGr)
Compute the sum on the 3rd dimension but only for the data which corresponding date to the current group
result(:,:,iGroup) = sum(data(:,:,grp==uniqueGr(iGroup)),3);
end
Note there is the function splitapply that makes this easier if you have 2D array