Python中数据点的平均趋势曲线

时间:2011-08-04 10:36:02

标签: python numpy scipy

我想重现一个类似于此的情节:

我的意思是我有一组数据点,我希望有一条显示平均趋势的曲线。

我尝试将随机噪声添加到函数y = 2x

  from scipy import interpolate

  x=arange(0,1,1e-3)
  noise=np.random.random(len(x))
  y=2*x+noise

然后我使用了一些Scipt函数来插入数据

  xnew=arange(0,1,1e-1)
  f=interpolate.UnivariateSpline(x,y)
  g=interpolate.interp1d(x,y)
  plot(x,y,'ro',xnew,f(xnew),'-',xnew,g(xnew),'--')
  show()

但我得到的曲线几乎不像y = 2 * x。我希望有一条平滑的曲线来平均数据。我可以使用哪种方法/功能?

3 个答案:

答案 0 :(得分:4)

曲线看起来不像y=2*x的原因之一(我认为确实如此,但这取决于意见)是因为与y的平均变化相比,你的噪音很大。如果你尝试这样的话:

noise=0.1*np.random.random(len(x))

(即使噪音更小)或

y=5*x**2+noise

(即使y的变化更大),您会看到插值更好地跟踪数据。

您可能还想查看:

http://www.scipy.org/Cookbook/SignalSmooth

答案 1 :(得分:2)

你可以试试fit.py,一个Python的曲线拟合包。

答案 2 :(得分:0)

enter image description here

单变量看起来完全像2x + 0.5(这是你的噪音的平均值)。

预计interp1d会随着噪音量的变化而变化很大。

根据您的目的,您可能希望编写自己的移动平均线,而不是使用股票插值方法;这主要是使用最后n个数据点的平均值而不是数据点。

那就是说,使用的库存插值方法也取决于你的目的。尝试一些并选择适合您目的的。