Sum the daily data based on month and year
4 views (last 30 days)
Show older comments
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
0 Comments
Accepted Answer
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
Stephane Dauvillier
on 30 Apr 2019
What do you mean by "unrealistic values" ?
You ask to sum the whatever data you have for each year.
Let's just take a tiny example
years = [1990,1990,1991];
data(:,:,1) = [1,2;3,4;5,6] ;
data(:,:,2) = [7,8;9,10;11,12];
data(:,:,3) = [13,14;15,16;17,18];
Then you will have as a result
for year 1990
result(:,:,1) = data(:,:,1) + data(:,:,2) = [8,10;12,14;16,18]
and for year 1991
result(:,:,2) = data(:,:,3) = [13,14;15,16;17,18];
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!