Mean of the third dimension

60 views (last 30 days)
Hi I an new to matlab and learning thru practice and patience. I have a data set with for precipitation containing data for 37 years. X=141, Y=41 and T=37. I want to get the mean per year (37) I tried the following code but on my dataset I ended uo with 71 observations. Why this is happening? If I only want the mean per year? Thanks in advance.
avg3=nanmean(rain(:,:,3));

Accepted Answer

John D'Errico
John D'Errico on 23 Oct 2019
Edited: John D'Errico on 23 Oct 2019
Not entirely sure what you are asking.
Do you want to compute the mean for each year for each combination of X and Y? That would result in a 141x41 array.
MeanRain = mean(rain,3);
Do you want to compute the mean over all X and Y, resulting in one element per year, so a vector of length 37? Here, I'd just reshape the rain matrix to be a 141*41 by 37 array, so 2-dimensional. Then take the mean down the columns of that array, so on the first dimension. The result of the computation below would be a 1x37 vector.
MeanRain = mean(reshape(rain,[],37),1);
Either could be what you are asking.
  2 Comments
desert_scientist90
desert_scientist90 on 23 Oct 2019

Sorry if I was not clear enough. My goal is to achieve one mean ( point) per year. In total I want 37 averages one per year. After that I want to calculate the zscore per year to be able to do a time series.

John D'Errico
John D'Errico on 24 Oct 2019
Then you just use the second option I gave.

Sign in to comment.

More Answers (1)

TADA
TADA on 23 Oct 2019
Edited: TADA on 23 Oct 2019
try this:
avgPerYear = nanmean(rain, [1,2]);
that would generate an inconvenient 3rd dimention vector
so you can reshape it into a row\column vector:
avgPerYear = reshape(nanmean(rain, [1,2]), size(rain,3), 1, 1); % column vector output
avgPerYear = reshape(nanmean(rain, [1,2]), 1, size(rain,3), 1); % row vector output

Community Treasure Hunt

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

Start Hunting!