Я пытаюсь вычислить скользящее среднее, но с заданным размером шага между каждым средним. Например, если бы я вычислял среднее значение окна из 4 элементов через каждые 2 элемента:
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; однако итераторы идут по одному элементу за раз, и я не могу понять, как установить размер шага между каждым вычислением среднего значения. (Как рассчитать скользящее среднее в Python 3? )
Я также смог сделать это раньше в MATLAB, создав матрицу индексов, которые перекрываются, а затем индексируют вектор данных и выполняют среднее значение по столбцу (Создать матрицу, многократно перекрывая вектор). Однако, поскольку этот вектор довольно велик (~70 000 элементов, окно 450 отсчетов, в среднем каждые 30 отсчетов), вычисление, вероятно, потребует слишком много памяти.
Любая помощь будет принята с благодарностью. Я использую Python 2.7.
n=4; s==2; [sum(data[s*i:s*i+n])/n for i, datum in enumerate(data[::s])]
, но, возможно, это не то, что вы ищете (datum
здесь не нужно, ноrange(len(data))
просто выглядит так не на Python). - person   schedule 13.01.2014