J'ai plusieurs séries de temps décrites chacune par deux composantes, un vecteur d'horodatage (en secondes) et un vecteur de valeurs mesurées. Le vecteur temporel est non uniforme (c'est-à-dire échantillonné à intervalles non réguliers)MATLAB: moyenne de calcul de chaque intervalle de 1 minute d'une série temporelle
J'essaie de calculer la moyenne/SD de chaque intervalle de 1 minute de valeurs (prendre X intervalle de minutes, calculer sa moyenne, prendre la prochaine intervalle, ...).
Ma mise en œuvre actuelle utilise des boucles. Ceci est un exemple de ce que j'ai jusqu'à présent:
t = (100:999)' + rand(900,1); %' non-uniform time
x = 5*rand(900,1) + 10; % x(i) is the value at time t(i)
interval = 1; % 1-min interval
tt = (floor(t(1)):interval*60:ceil(t(end)))'; %' stopping points of each interval
N = length(tt)-1;
mu = zeros(N,1);
sd = zeros(N,1);
for i=1:N
indices = (tt(i) <= t & t < tt(i+1)); % find t between tt(i) and tt(i+1)
mu(i) = mean(x(indices));
sd(i) = std(x(indices));
end
Je me demande s'il y a une solution plus rapide vectorisé. Ceci est important parce que j'ai un grand nombre de séries chronologiques à traiter chacune beaucoup plus longtemps que l'échantillon montré ci-dessus ..
Toute aide est la bienvenue.
Merci à tous pour vos commentaires.
Je corrige la façon dont t
est généré pour être toujours de plus en plus de façon monotone (trié), ce n'était pas vraiment un problème ..
En outre, je ne peux pas avoir dit clairement, mais mon intention était d'avoir une solution pour n'importe quelle longueur d'intervalle en minutes (1 minute était juste un exemple)
+1: Pour une raison quelconque, j'ai complètement oublié ACCUMARRAY. – gnovice
merci, c'est à la fois concis et facile à lire – merv
Je ne savais même pas sur accumarray. Merci de montrer à quel point cela peut être utile! – Jonas