Я пытаюсь вычислить скользящее среднее, но с установленным размером шага между каждым средним. Например, если я вычисление среднего окна 4 элемента каждые 2 элементов:Среднее число перекрывающихся окон в Python
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Это должно произвести среднее значение [1, 2, 3, 4], [3, 4, 5, 6] , [5, 6, 7, 8], [7, 8, 9, 10].
window_avg = [2.5, 4.5, 6.5, 8.5]
Мои данные таковы, что концовка будет урезана до обработки, поэтому нет никаких проблем с длиной по отношению к размеру окна.
Я немного читал о том, как делать скользящие средние в Python, и, похоже, много использования itertools; однако итераторы идут по одному элементу за раз, и я не могу понять, как иметь размер шага между каждым вычислением среднего. (How to calculate moving average in Python 3?)
Я также был в состоянии сделать это, прежде чем в MATLAB, создав матрицу индексов, которые перекрывают, а затем индексировать вектор данных и выполнение столбца мудрого среднего (Create matrix by repeatedly overlapping a vector). Однако, поскольку этот вектор довольно большой (~ 70 000 элементов, окно из 450 выборок, среднее каждые 30 выборок), для вычисления, вероятно, потребуется слишком много памяти.
Любая помощь была бы принята с благодарностью. Я использую Python 2.7.
Я бы попробовал что-то по строкам 'n = 4; s == 2; [sum (data [s * i: s * i + n])/n для i, datum в перечислении (data [:: s])] ', но, возможно, это не то, что вы ищете (' datum' здесь не нужно , но 'range (len (data))' просто выглядит так непитоновым). – Evert