scipy.interpolate.SmoothBivariateSpline.
__call__#
- SmoothBivariateSpline.__call__(x, y, dx=0, dy=0, grid=True)[原始碼]#
在給定位置評估 spline 或其導數。
- 參數:
- x, yarray_like
輸入座標。
如果 grid 為 False,則在點
(x[i], y[i]), i=0, ..., len(x)-1
評估 spline。 遵循標準 Numpy 廣播規則。如果 grid 為 True:在由座標陣列 x, y 定義的網格點評估 spline。 陣列必須按遞增順序排序。
軸的順序與
np.meshgrid(..., indexing="ij")
一致,且與預設順序np.meshgrid(..., indexing="xy")
不一致。- dxint
x 導數的階數
在 0.14.0 版本中新增。
- dyint
y 導數的階數
在 0.14.0 版本中新增。
- gridbool
是否在由輸入陣列跨越的網格上評估結果,或在由輸入陣列指定的點上評估結果。
在 0.14.0 版本中新增。
範例
假設我們想要在 2 維中雙線性內插一個指數衰減函數。
>>> import numpy as np >>> from scipy.interpolate import RectBivariateSpline
我們在粗網格上取樣函數。 請注意,meshgrid 的預設 indexing=”xy” 將導致內插後出現意外(轉置)結果。
>>> xarr = np.linspace(-3, 3, 100) >>> yarr = np.linspace(-3, 3, 100) >>> xgrid, ygrid = np.meshgrid(xarr, yarr, indexing="ij")
要內插的函數沿一個軸的衰減速度比另一個軸快。
>>> zdata = np.exp(-np.sqrt((xgrid / 2) ** 2 + ygrid**2))
接下來,我們使用內插在更精細的網格上取樣(kx=ky=1 代表雙線性)。
>>> rbs = RectBivariateSpline(xarr, yarr, zdata, kx=1, ky=1) >>> xarr_fine = np.linspace(-3, 3, 200) >>> yarr_fine = np.linspace(-3, 3, 200) >>> xgrid_fine, ygrid_fine = np.meshgrid(xarr_fine, yarr_fine, indexing="ij") >>> zdata_interp = rbs(xgrid_fine, ygrid_fine, grid=False)
並檢查結果是否與輸入一致,方法是將兩者都繪製出來。
>>> import matplotlib.pyplot as plt >>> fig = plt.figure() >>> ax1 = fig.add_subplot(1, 2, 1, aspect="equal") >>> ax2 = fig.add_subplot(1, 2, 2, aspect="equal") >>> ax1.imshow(zdata) >>> ax2.imshow(zdata_interp) >>> plt.show()