## Creating a monthly average from a matrix

on 20 Aug 2013

### Cedric Wannaz (view profile)

My data, which has 30 years of monthly data, over a 2 degree grid of the globe:

```>> whos KoppenA_prate
Name                Size                    Bytes  Class     Attributes
```
`    KoppenA_prate      90x180x360            23328000  single        `

Not every pixel has data, just the pixels that fit into Koppen classification A

```>> sum(A(:))
```
```ans =
```
`     559`

My question: Any ideas on how I could write a loop to create an average monthly value over the 30 years?

Thanks a bunch!

Kate

### Kate (view profile)

on 21 Aug 2013

90x180 is a 2 degree grid of the globe, 360 is 12 months x 30 years

Kate

### Kate (view profile)

on 21 Aug 2013

I would like to create a vector of precip data, for each month averaged over 30 years.

Kate

### Kate (view profile)

on 21 Aug 2013

This is as far as I've gotten, but my for loop isn't working:

```%Create monthly averages over 30 years
Jan=[1:12:349];
Feb=[2:12:350];
Mar=[3:12:351];
Apr=[4:12:352];
May=[5:12:353];
Jun=[6:12:354];
Jul=[7:12:355];
Aug=[8:12:356];
Sep=[9:12:357];
Oct=[10:12:358];
Nov=[11:12:359];
Dec=[12:12:360];
```
```for ii=length(num_mons)
if num_mons==Jan;
Jan_dat=[Jan,KoppenA_prate(3)];
elseif num_mons==Feb;
Feb_dat=[Feb,KoppenA_prate(3)];
end
end
```

## Products

No products are associated with this question.

### Cedric Wannaz (view profile)

on 21 Aug 2013
Edited by Cedric Wannaz

### Cedric Wannaz (view profile)

on 21 Aug 2013

Just

` avgAllYears = mean(KoppenA_prate, 3) ;`

where 3 is the dimension along which the mean must be computed. With that you get a 90x180 array of means over all times.

EDIT:

``` siz = size(KoppenA_prate) ;
avg = zeros(siz(1), siz(2), 12) ;
for mId = 1 : 12
avg(:,:,mId) = mean(KoppenA_prate(:,:,mId:12:end), 3) ;
end```

EDIT2: or, more efficient but more complicated

``` siz = size(KoppenA_prate) ;
buf = mean(reshape(KoppenA_prate, siz(1), 12*siz(2), []), 3) ;
avg = reshape(buf, siz(1), siz(2), []) ;```

Note: both produce a 90x180x12 array of monthly averages, were e.g. avg(:,:,5) is the average of 5th months over all years.

Cedric Wannaz

### Cedric Wannaz (view profile)

on 21 Aug 2013

Ok, I misunderstood "monthly average" for "average over monthly values". See my edits.

Kate

### Kate (view profile)

on 21 Aug 2013

Thanks Cedric, that's great. How could I get a single, say Jan, value over the whole grid? I need to plot average yearly precip.

Thanks for all of your help!

Cedric Wannaz

### Cedric Wannaz (view profile)

on 21 Aug 2013

You're welcome; see my last note.

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test