Sum the daily data based on month and year

35 views (last 30 days)
Ryn
Ryn on 29 Apr 2019
Answered: ABHILASH SINGH on 13 Mar 2020
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

Accepted Answer

Stephane Dauvillier
Stephane Dauvillier on 29 Apr 2019
Edited: Stephane Dauvillier on 29 Apr 2019
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
  3 Comments

Sign in to comment.

More Answers (1)

ABHILASH SINGH
ABHILASH SINGH on 13 Mar 2020

Tags

Community Treasure Hunt

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

Start Hunting!