Ho una serie di serie temporali ciascuna descritta da due componenti, un vettore di data/ora (in secondi) e un vettore di valori misurati. Il vettore del tempo non è uniforme (cioè campionato a intervalli non regolari)MATLAB: media di calcolo di ogni intervallo di 1 minuto di una serie temporale
Sto provando a calcolare la media/SD di ciascun intervallo di valori di 1 minuto (prendi X minuto di intervallo, calcola la sua media, prendi il prossimo intervallo, ...).
La mia attuale implementazione utilizza cicli. Questo è un esempio di ciò che ho fino ad ora:
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
Mi chiedo se esiste una soluzione vettoriale più veloce. Questo è importante perché ho un gran numero di serie temporali da elaborare ognuna molto più a lungo del campione mostrato sopra ..
Qualsiasi aiuto è benvenuto.
Grazie a tutti per il feedback.
ho corretto il modo in cui viene generato t
di essere sempre monotona crescente (ordinato), questo non era davvero un problema ..
Inoltre, non può aver detto questo, ma evidentemente la mia intenzione era quella di avere una soluzione per qualsiasi intervallo in minuti (1 min è stato solo un esempio)
+1: per qualche motivo, ho completamente trascurato ACCUMARRAY. – gnovice
grazie, questo è sia conciso e facile da leggere – merv
Non sapevo nemmeno di accumarray. Grazie per aver dimostrato quanto possa essere utile! – Jonas