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()
../../_images/scipy-interpolate-SmoothBivariateSpline-__call__-1.png