我想在這樣的表上使用scipy或pandas插值:
df = pd.DataFrame({'x':[1,1,1,2,2,2],'y':[1,2,3,1,2,3],'z':[10,20,30,40,50,60] })
df =
x y z
0 1 1 10
1 1 2 20
2 1 3 30
3 2 1 40
4 2 2 50
5 2 3 60
我希望能夠對x1.5 和y2.5 的值進行插值并獲得 40。
該程序將是:
- 從第一個插值引數 (
x) 開始,找到目標值周圍的值。在這種情況下,目標是 1.5,周圍的值是 1 和 2。 y考慮到 2.5 的目標插值x=1。在這種情況下,在第 1 行和第 2 行之間,獲得 25y考慮到 2.5 的目標插值x=2。在這種情況下,在第 4 行和第 5 行之間,獲得 55- 將先前步驟中的值內插到目標值
x。在這種情況下,我有 25 個 forx=1和 55 個 forx=2。1.5 的內插值為 40
執行插值的順序是固定的,資料將被正確排序。
我發現了這個問題,但我想知道這些庫中是否已有標準解決方案。
uj5u.com熱心網友回復:
您可以使用scipy.interpolate.interp2d:
import scipy.interpolate
f = scipy.interpolate.interp2d(df.x, df.y, df.z)
f([1.5], [2.5])
[40.]
第一行使用、和的z = f(x, y)三個陣列創建插值函式。第二行使用此函式對和的給定值進行插值。默認為線性插值。xyzzxy
uj5u.com熱心網友回復:
定義您的插值函式:
def interpolate(x, y, df):
cond = df.x.between(int(x), int(x) 1) & df.y.between(int(y), int(y) 1)
return df.loc[cond].z.mean()
interpolate(1.5,2.5,df)
40.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/488340.html
