2014-11-24 2 views
0

У меня есть временной ряд с 12 данных точек x n сеансов. Все значения находятся в одном столбце.Рассчитать среднее значение по серии с фиксированным интервалом

Я хотел бы усреднить по всем сеансам, чтобы получить 1 серию только с 12 точками данных. Например, я мог бы иметь:

[a1 a2 ... a12 b1 b2 ... b12 c1 c2 ... c12] 

Результат должен быть [mean(a1, b1, c1) mean (a2, b2, c2)... mean(a12, b12, c12)]

Может кто-нибудь помочь мне сделать это эффективно в Matlab?

Спасибо!

ответ

0

Количество элементов в исходной серии всегда будет кратно 12, поэтому вы можете использовать reshape(), чтобы получить матрицу размером 12 x n. Оттуда, используя mean(), вы можете получить вектор, который вы хотите.

nSessions = 20; % Choose an integer to test number of sessions 
TestData = 1:12; % Dummy data - col 1 = 1, col 2 = 2...to check that our reshaping is correct 
data = repmat(TestData, 1, nSessions); % Test data of the expected form 
reshapeData = reshape(data, 12, []); % Reshape into an 12 x N matrix; 
meanData = mean(reshapeData, 2); % Take mean along rows to yield desired answer 
+0

Спасибо, Staus. По какой-то причине, когда я запускал это, он дал мне «Index превышает ошибку размеров матрицы». Когда я применил свои данные, я получил еще одну ошибку: индексы индексов должны быть либо реальными целыми положительными, либо логическими. Я получил логику этого, но не уверен, что здесь не так. –

+0

Сделайте «очистить все», прежде чем запускать мой код, чтобы убедиться, что это не что-то из старых переменных, вызывающих проблемы. Если это не выполняется, запустите каждую строку отдельно и выясните, какая из них дает ошибку. – Staus

+0

Вы были правы. Это действительно то, над чем я работал, вмешивался в код. Огромное спасибо. Это работает чудесно. –

Смежные вопросы