Finden gleitenden Durchschnitt von Datenpunkten in Python

Spiele ich in Python ein bisschen wieder, und ich fand ein ordentliches Buch mit Beispielen. Eines der Beispiele ist die Handlung einige Daten. Ich habe eine .txt-Datei mit zwei Spalten und ich habe die Daten. Ich geplottet den Daten ganz gut, aber in der übung heißt es: Ändern Sie Ihr Programm weiter zu berechnen und Plotten Sie den Laufenden Durchschnitt der Daten, definiert durch:

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

wo r=5 in diesem Fall (und das y_k ist die zweite Spalte in der Daten-Datei). Haben Sie das Programm plot sowohl die original-Daten und der laufende Durchschnitt auf der gleichen Kurve.

Bisher habe ich dieses:

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

So, wie berechne ich die Summe? In Mathematica ist es einfach, da es die symbolische manipulation (Sum[i, {i,0,10}] zum Beispiel), aber wie berechne Summe in python die alle zehn Punkte in den Daten und Durchschnitte, und tut dies bis zum Ende der Punkte?

Ich schaute auf das Buch, aber nichts gefunden, was erklären würde :\


heltonbiker code war der trick ^^ 😀

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

Und ich habe diese:

Finden gleitenden Durchschnitt von Datenpunkten in Python

Vielen Dank ^^ 🙂

Das ist komisch. Da wir nicht über Ihre txt-Datei, es ist nicht möglich zum testen hier, aber ich denke, die xlim Zeile sollte nicht verwendet werden (nur für den Fall)
Ich habe die Punkte von hier: www-personal.umich.edu/~mejn/computational physics/Sonnenflecken.dat Und abnehmen xlim nicht helfen :\
Ich habe einen Fehler im code! führen Sie die Durchschnittliche auf dem y-array, nicht x: y_av = movingaverage(y, r) plot(x, y_av). Und Sie können xlim wieder, denke ich.
Genial! 😀 Danke ^^
Ich denke, wir müssen Sie nutzen "gilt" statt "gleichen" hier - return numpy.convolve(Intervall -, Fenster -, 'gleiche')

InformationsquelleAutor dingo_d | 2012-07-05

Schreibe einen Kommentar