Calculate mean from daily to monthly values

4 Ansichten (letzte 30 Tage)
minh lan
minh lan am 16 Mai 2019
Beantwortet: ABHILASH SINGH am 13 Mär. 2020
I have I have a data containing daily pricipitation data from 2001 to 2010, each year I have 1 file
lon=ncread(ncfile,'lon');
lat=ncread(ncfile,'lat');
precip=ncread(ncfile,'precip');
precip 360 x 280 x 365
lat 280x1
lon 360x1
I want to calculate the monthly mean for each year and then calculate average for 10 years.
the slow way I can do like that:
JAN{K}=nansum(precip{K}(:,:,1:31),3); %K is number of year
FEB{K}=nansum(precip{K}(:,:,32:59),3);
JAN=cat(3,JAN{:});
JAN=mean(JAN,3);
but for 2004, 2008 we have 366 day and this way is not very good to calculate
How can I do that with loop?
Thanks

Akzeptierte Antwort

convert_to_metric
convert_to_metric am 16 Mai 2019
Hi minh lan,
You can consider making use of the month funciton. Take a look at the following code, perhaps it will lead you to a solution.
data=[1:365]*10; % just some example data
length_of_precip_data=length(data); % you might need to use the size function in place of length depending on how your data is organized
year=2010; % for example
start=datetime(year,1,1);
m=month(start+caldays(1:length_of_precip_data)-1); % now you have an array the same size as your data that indicates which month an element is in
% so if you want to find just values from february:
data(m==2) % february is the second month, ie m==2

Weitere Antworten (2)

Steven Lord
Steven Lord am 16 Mai 2019
Use the groupsummary function or store your data in a timetable and use retime on that timetable.

ABHILASH SINGH
ABHILASH SINGH am 13 Mär. 2020

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by