2013-06-10 7 views
3

J'ai mesuré une poignée de variables par intervalles de 30 minutes. Les horodatages sont disponibles au format datevec ou datenum. Je veux calculer ...MATLAB: Moyenne des données de séries chronologiques sans boucles?

a) ... moyennes quotidiennes et
b) ... valeurs moyennes au temps x, par ex. la température à 11:30, la température à 12:00, etc. ont été moyennées sur l'ensemble de mes données. Bien que ce soit plus ou moins facile avec des boucles, je me demande s'il existe un moyen plus facile/plus pratique de travailler avec des séries temporelles, puisque c'est une tâche assez basique après tout?

/éditer 1: Selon la demande: click me for sample data

+2

I peut fournir une solution avec 'accumarray()' si vous postez des exemples de données. – Oleg

+0

J'espère que 100 mesures sont suffisantes: [cliquez sur moi pour des exemples de données] (https://dl.dropboxusercontent.com/u/9437411/sampledata_ts.mat) –

Répondre

6

Considérant que datevec() sortie est stockée dans tvec et des données dans x, groupe avec unique(...,'rows') et accumuler avec accumarray():

% Group by day 
[unDates, ~, subs] = unique(tvec(:,1:3),'rows'); 

% Accumulate by day 
[unDates accumarray(subs, x, [], @mean)] 

% Similarly by hour 
[unHours, ~, subs] = unique(tvec(:,4:5),'rows'); 
[unHours accumarray(subs, x, [], @mean)] 
+0

+1: toute solution valide avec 'accumarray' le mérite! Ce bébé devrait être promu autant que possible :) –

+0

Solution très élégante, merci beaucoup. –

Questions connexes