Нахождение скользящего среднего по точкам данных в Python

Я снова немного поиграл в Python и нашел классную книжку с примерами. Одним из примеров является построение некоторых данных. У меня есть файл.txt с двумя столбцами, и у меня есть данные. Я отлично нарисовал данные, но в упражнении говорится :Измените вашу программу дальше, чтобы вычислить и построить скользящее среднее данных, определенное:

$Y_k=\frac{1}{2r}\sum_{m=-r}^r y_{k+m}$

где r=5в данном случае (, а y_k— второй столбец в файле данных ). Пусть программа нанесет исходные данные и скользящее среднее на один и тот же график.

Пока у меня есть:

from pylab import plot, ylim, xlim, show, xlabel, ylabel
from numpy import linspace, loadtxt

data = loadtxt("sunspots.txt", float)
r=5.0

x = data[:,0]
y = data[:,1]

plot(x,y)
xlim(0,1000)
xlabel("Months since Jan 1749.")
ylabel("No. of Sun spots")
show()

Итак, как мне рассчитать сумму? В Mathematica это просто, так как это символическая манипуляция (Sum[i, {i,0,10}] например ), но как вычислить сумму в python, которая берет каждые десять точек в данных и усредняет их, и делает так до конца точек?

Я просмотрел книгу, но не нашел ничего, что объясняло бы это :\


код Heltonbiker помог ^^ :D

from __future__ import division
from pylab import plot, ylim, xlim, show, xlabel, ylabel, grid
from numpy import linspace, loadtxt, ones, convolve
import numpy as numpy

data = loadtxt("sunspots.txt", float)

def movingaverage(interval, window_size):
    window= numpy.ones(int(window_size))/float(window_size)
    return numpy.convolve(interval, window, 'same')

x = data[:,0]
y = data[:,1]


plot(x,y,"k.")
y_av = movingaverage(y, 10)
plot(x, y_av,"r")
xlim(0,1000)
xlabel("Months since Jan 1749.")
ylabel("No. of Sun spots")
grid(True)
show()

И я получил это:

image

Большое спасибо ^^:)

41
задан dingo_d 5 July 2012 в 21:25
поделиться