在Python中找到数据点的移动平均值
在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()
然后我得到了这个图片:
非常感谢 ^^ 🙂