日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python 插值 —— 如何實現插值,以及錯誤ValueError: A value in x_new is below the interpolation range.

作者:別出BUG求求了 更新時間: 2023-11-16 編程語言

1. 插值

插值,是離散函數逼近的重要方法,利用它可通過函數在有限個點處的取值狀況,估算出函數在其他點處的近似值。

插值與擬合有一定差別,但其目的都是類似的,根據已有數值,生成預測函數,來預測目標值。

2. python實現

下面介紹一下,在Python中如何實現插值。

import scipy.interpolate as spi

# 準備數據,X和Y都是有限離散點集,X與Y是一一對應的
# 我們想用X逼近Y
X 
Y  

# 準備插值點,就是擬合點,用于生成插值函數
# 1)如果(X, Y)有很多,就從X和Y中選擇一部分點,作為插值點,選擇的時候注意一一對應;
# 2)如果(X, Y)不太多,則可以選擇所有點作為插值點;
# 這里由于(X, Y)很龐大,所以選擇其中一部分點作為插值點
idx = np.arange(1,len(X)+1, 100)
new_x = [list(X)[i] for i in idx] 
new_y = [list(Y)[i] for i in idx] 

# 生成差值函數
# kind代表插值函數格式,有這幾種['linear','zero', 'slinear', 'quadratic', 'cubic', 4, 5]
f = spi.interp1d(X,Y,kind="linear")

# 隨便給一個x,預測Y
x = [1000, 2000]
predict_y = f(x)

如果在預測的時候,出現以下報錯

ValueError: A value in x_new is below the interpolation range.

原因: 在使用上述插值函數f ff進行預測的時候,所給的x的取值超出了【生成該函數時候所使用的X】的取值范圍,函數給不出預測值,因此報錯。

解決辦法:加上參數fill_value="extrapolate"就可以了,函數會自動推斷給出預測值。但是注意:如果需要預測的Y YY不是單調的,使用該參數自動推斷出來的預測值y yy可能會不準確。(因為這里面的自動推斷,應該是按照線性單調推斷的,這個我還沒有確認過)

# fill_value="extrapolate"的意思是當用該函數預測Y時,如果所給x超出【生成該函數時候所使用的X】的取值范圍時,該函數會自動推測給出相應的預測值y。
f = spi.interp1d(X,Y,kind="linear",fill_value="extrapolate")

原文鏈接:https://blog.csdn.net/weixin_39589455/article/details/128098928

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新