我在Python中再玩一遍,並且找到了一個帶有示例的整潔書。其中一個例子是繪製一些數據。我有一個兩列的.txt文件,我有數據。我繪製的數據不錯,但在運動,它說:進一步修改程序來計算和繪製數據,通過規定的移動平均:從Python中的數據點中找到移動平均數
$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中的和,並將數據中的每10個點取平均值,直到結束點數?
我看着書,但沒有發現任何可以解釋這一點:\
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()
而且我得到了這一點:
非常感謝你^^ :)
這是奇怪的。由於我們沒有你的txt文件,所以不可能在這裏測試,但我認爲'xlim'行不應該被使用(以防萬一) – heltonbiker 2012-07-05 21:11:30
我從這裏得到了點:http:// www-personal。 umich.edu/~mejn/computational-physics/sunspots.dat 並刪除xlim沒有幫助:\ – 2012-07-05 21:14:29
我犯了一個錯誤的代碼!您必須在y陣列上執行平均值,而不是x: 'y_av = movingaverage(y,r)' 'plot(x,y_av)'。我想,你可以再次使用xlim。 – heltonbiker 2012-07-05 21:20:15