Tengo un montón de series de tiempo, cada una descrita por dos componentes, un vector de marca de tiempo (en segundos) y un vector de valores medidos. El vector de tiempo no es uniforme (es decir, muestreado en intervalos no regulares)MATLAB: calcular la media de cada intervalo de 1 minuto de una serie de tiempo
Estoy tratando de calcular la media/desviación estándar de cada intervalo de 1 minuto de valores (tome el intervalo de X minutos, calcule su media, tome la siguiente intervalo, ...).
Mi implementación actual utiliza bucles. Esta es una muestra de lo que tengo hasta ahora:
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
Me pregunto si existe una solución vectorizada más rápida. Esto es importante porque tengo un gran número de series de tiempo para procesar cada una mucho más tiempo que la muestra que se muestra arriba.
Cualquier ayuda es bienvenida.
Gracias a todos por los comentarios.
corregí la forma t
se genera siempre ser monótona creciente (ordenados), esto no era realmente un problema ..
Además, puede que no haya declarado esto con claridad, pero mi intención era tener una solución para cualquier longitud de intervalo en minutos (1 min fue solo un ejemplo)
+1: Por alguna razón, pasé por alto completamente ACCUMARRAY. – gnovice
gracias, esto es conciso y fácil de leer – merv
Ni siquiera sabía acerca de accumarray. ¡Gracias por demostrar lo útil que puede ser! – Jonas