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

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

python 插值 —— 如何實(shí)現(xiàn)插值,以及錯(cuò)誤ValueError: A value in x_new is below the interpolation range.

作者:別出BUG求求了 更新時(shí)間: 2023-11-16 編程語(yǔ)言

1. 插值

插值,是離散函數(shù)逼近的重要方法,利用它可通過(guò)函數(shù)在有限個(gè)點(diǎn)處的取值狀況,估算出函數(shù)在其他點(diǎn)處的近似值。

插值與擬合有一定差別,但其目的都是類似的,根據(jù)已有數(shù)值,生成預(yù)測(cè)函數(shù),來(lái)預(yù)測(cè)目標(biāo)值。

2. python實(shí)現(xiàn)

下面介紹一下,在Python中如何實(shí)現(xiàn)插值。

import scipy.interpolate as spi

# 準(zhǔn)備數(shù)據(jù),X和Y都是有限離散點(diǎn)集,X與Y是一一對(duì)應(yīng)的
# 我們想用X逼近Y
X 
Y  

# 準(zhǔn)備插值點(diǎn),就是擬合點(diǎn),用于生成插值函數(shù)
# 1)如果(X, Y)有很多,就從X和Y中選擇一部分點(diǎn),作為插值點(diǎn),選擇的時(shí)候注意一一對(duì)應(yīng);
# 2)如果(X, Y)不太多,則可以選擇所有點(diǎn)作為插值點(diǎn);
# 這里由于(X, Y)很龐大,所以選擇其中一部分點(diǎn)作為插值點(diǎn)
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] 

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

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

如果在預(yù)測(cè)的時(shí)候,出現(xiàn)以下報(bào)錯(cuò)

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

原因: 在使用上述插值函數(shù)f ff進(jìn)行預(yù)測(cè)的時(shí)候,所給的x的取值超出了【生成該函數(shù)時(shí)候所使用的X】的取值范圍,函數(shù)給不出預(yù)測(cè)值,因此報(bào)錯(cuò)。

解決辦法:加上參數(shù)fill_value="extrapolate"就可以了,函數(shù)會(huì)自動(dòng)推斷給出預(yù)測(cè)值。但是注意:如果需要預(yù)測(cè)的Y YY不是單調(diào)的,使用該參數(shù)自動(dòng)推斷出來(lái)的預(yù)測(cè)值y yy可能會(huì)不準(zhǔn)確。(因?yàn)檫@里面的自動(dòng)推斷,應(yīng)該是按照線性單調(diào)推斷的,這個(gè)我還沒(méi)有確認(rèn)過(guò))

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

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

  • 上一篇:沒(méi)有了
  • 下一篇:沒(méi)有了
欄目分類
最近更新