在Python中找到数据点的移动平均值

21 浏览
0 Comments

在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 的代码解决了问题 ^^ 😀

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

非常感谢 ^^ 🙂

0