How to make a loop to find average of each month
Afficher commentaires plus anciens
I have a data set of monthly averages and would like to make a loop to get an average of every month, so the average of every January, February, and etc.
Here is my data:
1973 1 144.46 4.68
1973 2 118.77 5.05
1973 3 57.76 7.42
1973 4 103.44 6.01
1973 5 84.11 6.18
1973 6 74.74 6.11
1973 7 64.86 6.46
1973 8 69.95 6.07
1973 9 75.25 5.66
1973 10 91.90 5.64
I can do it the hard way:
a=find(vinddata_mean_monthly(:,2)==1);
jan=vinddata_mean_monthly(a,:);
jan_dir=mean(jan(:,3));
jan_spd=mean(jan(:,4));
..
But if anyone could help my make a loop, help would be greatly appreciated.
Kristine
2 commentaires
Azzi Abdelmalek
le 20 Juin 2014
Your question is not clear
Star Strider
le 20 Juin 2014
What is the size of your matrix?
How many complete years do you have?
Réponse acceptée
Plus de réponses (1)
Here is one solution if you need monthly means over all years [mean(Jan73,Jan74,..); mean(Feb73,Feb74,..); ..]:
dir_monthly = accumarray( data(:,2), data(:,3), [12,1], @mean ) ;
spd_monthly = accumarray( data(:,2), data(:,4), [12,1], @mean ) ;
where data is what you named vinddata_mean_monthly in your question. This works if there are missing data.
2 commentaires
dpb
le 21 Juin 2014
Yeah, it's that the input to accumarray must be a vector so couldn't figure out anything that wasn't either a double as you wrote or over accumarray itself that I went w/ the loop, Cedric.
I often test/profile the loop as well to be honest. Sometimes we think that we do better than a loop with ACCUMARRAY and we end up using CELLFUN/ARRAYFUN/etc to prepare indices because there is no way to get them drectly. And we are mistaken because it looks more elegant and concise but it is not as efficient overall.
Yet, when we are lucky enough to be in a situation where ACCUMARRAY can be used directly, it is difficult to beat.
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!