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

2024-04-16 22:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想复制一个类似的情节:


(来源:brleader.com

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

我试着在函数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。我希望有一个平滑的曲线来平均数据。我可以使用哪种方法/功能?


Tags: 数据函数fromcom来源randomscipy曲线
3条回答

曲线看起来不像y=2*x(我想是的,但这要看意见)的原因之一是,与y的平均变化相比,你的噪声很大。如果你尝试类似的方法:

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

(即使噪音更小)或

y=5*x**2+noise

(即使y中的更改更大),您将看到插值更好地跟踪数据。

您可能还想签出:

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

enter image description here

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

可以预料,interp1d随噪声的大小变化很大。

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

也就是说,股票插值方法的使用也取决于你的目的。试试看,选择适合你的。

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

相关问题 更多 >