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 ^^ :)