我想重现一个类似于此的情节:
我的意思是我有一组数据点,我希望有一条显示平均趋势的曲线。
我尝试将随机噪声添加到函数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。我希望有一条平滑的曲线来平均数据。我可以使用哪种方法/功能?
答案 0 :(得分:4)
曲线看起来不像y=2*x
的原因之一(我认为确实如此,但这取决于意见)是因为与y的平均变化相比,你的噪音很大。如果你尝试这样的话:
noise=0.1*np.random.random(len(x))
(即使噪音更小)或
y=5*x**2+noise
(即使y
的变化更大),您会看到插值更好地跟踪数据。
您可能还想查看:
答案 1 :(得分:2)
你可以试试fit.py,一个Python的曲线拟合包。
答案 2 :(得分:0)
单变量看起来完全像2x + 0.5(这是你的噪音的平均值)。
预计interp1d会随着噪音量的变化而变化很大。
根据您的目的,您可能希望编写自己的移动平均线,而不是使用股票插值方法;这主要是使用最后n个数据点的平均值而不是数据点。
那就是说,使用的库存插值方法也取决于你的目的。尝试一些并选择适合您目的的。