我想复制一个类似的情节:
(来源: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。我希望有一个平滑的曲线来平均数据。我可以使用哪种方法/功能?
曲线看起来不像
y=2*x
(我想是的,但这要看意见)的原因之一是,与y的平均变化相比,你的噪声很大。如果你尝试类似的方法:(即使噪音更小)或
(即使
y
中的更改更大),您将看到插值更好地跟踪数据。您可能还想签出:
http://www.scipy.org/Cookbook/SignalSmooth
单变量看起来完全像2x+0.5(这是噪音的平均值)。
可以预料,interp1d随噪声的大小变化很大。
根据您的目的,您可能希望编写自己的移动平均值,而不是使用股票插值方法;这实际上是使用最近n个数据点的平均值,而不是一个数据点。
也就是说,股票插值方法的使用也取决于你的目的。试试看,选择适合你的。
您可以尝试fit.py,一个Python的曲线拟合包。
相关问题 更多 >
编程相关推荐