Кажется, единственное логическое решение ...
Ok. Мне смешно, что для меня есть только одно логическое решение, но многие другие находят другие решения. В любом случае, решение кажется простым. При заданных векторах x и t и множестве точек разрыва tt, расположенных на одинаковом расстоянии
t = sort((100:999)' + 3*rand(900,1)); % non-uniform time
x = 5*rand(900,1) + 10; % x(i) is the value at time t(i)
tt = ( floor(t(1)):1*60:ceil(t(end)) )';
(Обратите внимание, что я отсортировал т выше.)
Я бы сделал это в трех полностью векторизованных строках кода. Во-первых, если бы разрывы были произвольными и потенциально неравными в интервале, я бы использовал historyc, чтобы определить, в какие интервалы попадает ряд данных. Учитывая, что они однородны, просто сделайте это:
int = 1 + floor((t - t(1))/60);
Опять же, если бы не было известно, что элементы t отсортированы, я бы использовал min (t) вместо t (1). Сделав это, используйте accumarray, чтобы уменьшить результаты до среднего и стандартного отклонения.
mu = accumarray(int,x,[],@mean);
sd = accumarray(int,x,[],@std);