我又玩了一下 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 的代码成功了^^: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()
我得到了这个:
非常感谢^^ :)