Znajdowanie średniej ruchomej z punktów danych w Pythonie

Ponownie gram w Pythonie i znalazłem zgrabną książkę z przykładami. Jednym z przykładów jest wykreślenie niektórych danych. Mam plik .txt z dwiema kolumnami i mam dane. Wykreśliłem dane w porządku, ale w ćwiczeniu mówi: Zmodyfikuj program dalej, aby obliczyć i wykreślić średnią bieżącą danych, zdefiniowaną przez:

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

gdzier=5 w tym przypadku (iy_k jest drugą kolumną w pliku danych). Niech program wykreśli zarówno oryginalne dane, jak i bieżącą średnią na tym samym wykresie.

Do tej pory mam to:

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()

Jak więc obliczyć sumę? W Mathematice jest to proste, ponieważ jest to manipulacja symboliczna (na przykład suma [i, {i, 0,10}], ale jak obliczyć sumę w pytonie, która pobiera co dziesięć punktów w danych i uśrednia ją, i robi to do końca punktów?

Spojrzałem na książkę, ale nie znalazłem nic, co mogłoby to wyjaśnić:

kod heltonbikera zrobił sztuczkę ^^: 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()

I mam to:

Dziękuję bardzo ^^ :)

questionAnswers(7)

yourAnswerToTheQuestion