我想寫一些非常基本的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