У меня есть серия временных рядов, каждая из которых описывается двумя компонентами, вектором временной метки (в секундах) и измеренным вектором значений. Вектор времени является неоднородным (т.е. Отбирается с нерегулярными интервалами)
Я пытаюсь вычислить среднее значение /SD для каждого интервала значений в 1 минуту (взять X минутный интервал, вычислить его среднее значение, взять следующий интервал,...).
В моей текущей реализации используются циклы. Это пример того, что у меня есть до сих пор:
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
Мне интересно, есть ли более быстрое векторное решение. Это важно, потому что у меня есть большое количество временных рядов, чтобы обрабатывать их намного дольше, чем пример, показанный выше.
Любая помощь приветствуется.
Спасибо всем за отзывы.
Я исправил способ генерации t
, который всегда монотонно возрастает (сортируется), это не проблема.
Кроме того, я, возможно, и не сказал этого ясно, но мое намерение состояло в том, чтобы иметь решение для любой длины интервала в минутах (1 минута была всего лишь примером)