Estoy jugando un poco más en Python, y encontré un libro ordenado con ejemplos. Uno de los ejemplos es trazar algunos datos. Tengo un archivo .txt con dos columnas y tengo la información. He trazado los datos muy bien, pero en el ejercicio que dice: Modificar el programa además para calcular y representar gráficamente la media móvil de los datos, que se define por:Encontrar promedio móvil de puntos de datos en Python
$Y_k=\frac{1}{2r}\sum_{m=-r}^r y_{k+m}$
donde r=5
en este caso (y el y_k
es el segunda columna en el archivo de datos). Haga que el programa grabe los datos originales y el promedio continuo en el mismo gráfico.
Hasta ahora tengo esto:
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()
Entonces, ¿cómo puedo calcular la suma? En Mathematica es simple ya que es manipulación simbólica (Sum [i, {i, 0,10}] por ejemplo), pero cómo calcular la suma en python que toma cada diez puntos en los datos y los promedia, y lo hace hasta el final de puntos?
Miré el libro, pero no encontraron nada que pudiera explicar esto: \ code
de heltonbiker hizo el truco ^^: 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()
y me dieron esto:
Muchas gracias ^^ :)
eso es raro. Como no tenemos su archivo txt, no es posible realizar la prueba aquí, pero creo que no se debe usar la línea 'xlim' (por si acaso) – heltonbiker
Obtuve los puntos aquí: http: // www-personal. umich.edu/~mejn/computational-physics/sunspots.dat Y eliminar xlim no ayudó: \ –
¡Cometí un error en el código! debe realizar el promedio en la matriz y, no x: 'y_av = movingaverage (y, r)' 'plot (x, y_av)'. Y puedes usar xlim nuevamente, creo. – heltonbiker