我想写一些非常基本的Python代码,输出基于输入和输出样本的数字。因此,例如,如果:从曲线拟合Python估计值
x = [1, 2, 3, 4, 5]
y = [2, 5, 10, 17, 26]
z = np.interp(7, xp, yp)
print(z) ##expected 50, actual was 26
我想有办法找到这些值映射在一起的最佳拟合函数,这样我可以通过它的另一个x值,并得到y值的粗略近似。我尝试阅读scipy.optimize.curve_fit
,但据我所知,这不是我应该使用的,因为这使用了预定义的函数,在我的情况下我没有。
注意,我没有限制函数是否应该是线性/周期/二次等,因为我的值会有所不同,但我的假设是,大部分函数应该是线性的。
我也试过numpy.interp
但我只是得到y
阵列中的最后一个值,无论我输入的是x
。
编辑:经过与Cleb的答案混乱,然后与肯尼特的原始方法进行比较,这里是我的发现。 这里最准确的技术应该是最接近红线的功能。绿线代表kennytm的方法(二次回归是我尝试的最准确的方法),黑线代表Cleb的技术(UnivariateSpline)。看起来,因为UnivariateSpline没有事先知道底层模型,所以在适应函数的值时会稍微好一些,这会使函数的值更精确一些。
您正在寻找的概念是[插入](https://en.wikipedia.org/wiki/Interpolation)。例如,请参阅[scipy插入教程](https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html)以获取['scipy中可用的一些工具的描述.interpolate'包](https://docs.scipy.org/doc/scipy/reference/interpolate.html)。 –
对于一维数据的线性插值,['numpy.interp()'](https://docs.scipy.org/doc/numpy/reference/generated/numpy.interp.html)可能就是你需要的一切。 –
@warrenweckesser我不认为这是,我只是试过了。检查我最后的编辑。 – ninesalt