Making a monthly mean

11 views (last 30 days)
Jonas Damsbo
Jonas Damsbo on 27 Oct 2018
Commented: Jonas Damsbo on 27 Oct 2018
I have data for the geopotential for every 6 hours over a whole month. I want to get a mean over the data for the month. For example for January, I have 124 timesteps, each with their data, but I only want data for the whole month (1 dataset). I have tried, but I'm not sure if I've done it right? Pleas can anyone help me?
lon = ncread(filename,'longitude') ; nx = length(lon) ;
lat = ncread(filename,'latitude') ; ny = length(lat) ;
time = ncread(filename,'time') ; nt = length(time);
zmean = zeros([nx ny]);
for n = 1:nt
z = ncread(filename,'z',[1 1 nt],[nx ny 1]);
zx(:,1:ny) = z(:,ny:-1:1);
zmean = zmean + zx;
zmean = zmean/nt;
Here is (lon = 360x1), (lat = 181x1), (time = 124x1 int32), (z = 360x181)

Accepted Answer

jonas on 27 Oct 2018
Edited: jonas on 27 Oct 2018
Use datetime with retime . Upload data for details.
jonas on 27 Oct 2018
Edited: jonas on 27 Oct 2018
After looking at your data I think perhaps a timetable is in fact not the way to go, as I suspect that you want to retain the gridded nature of your data. If the problem is to average the monthly data, then I think there is a very simple solution. Simply,
z = ncread(filename,'z');
z_monthly(:,:,1) = mean(z,3);
This takes the average over the third dimension (time). Then you can simply put february's data in z_monthly(:,:,2) etc... and you will end up with a lat x lon x n matrix where n is the number of months.
If the data is uniformly spaced, then I see no point in using retime. If some data is missing, however, then you'd probably want to interpolate before taking the average.
I would also suggest you take your time-vector and convert it to datetime, to make life easier for you.
t = datetime(1900,1,1,0,0,0)+hours(time);
t =
124×1 datetime array
01-Dec-1979 00:00:00
01-Dec-1979 06:00:00
01-Dec-1979 12:00:00
Did I understand the issue?

Sign in to comment.

More Answers (1)

Jonas Damsbo
Jonas Damsbo on 27 Oct 2018
I think I understand your solution. You can see I have data for one month for every 6 hour and I want the mean for the month (over all hours in the month - in this example December).
Jonas Damsbo
Jonas Damsbo on 27 Oct 2018
Great! Thank you!

Sign in to comment.


Find more on Tables 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!

Translated by