官方文檔鏈接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d
這篇博客接着上次的scipy一維插值,講講二維插值api的用法
scipy庫中可以通過interp2d類來實現一維插值
類原型:class scipy.interpolate.
interp2d
(x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=None)
參數如下:
x和y:插值點的x和y坐標。具體有兩種寫法,如果x和y可以通過笛卡爾積構成網格(例如x=[1,2,3],y=[0,3]),則x和y就會被視為網格,插值點個數為len(x)*len(y);
如果不能,那么x和y必須一一對應以指出每個插值點的x和y坐標,x和y的長度必須一致,比如x=[2,3,1],y=[0,0,4]就表示(2,0),(3,0),(1,4)三個插值點,插值點個數為len(x)或len(y);
如果x和y是多維的,則會被自動展平;
z:插值點的z坐標,一維數組(如果是多維則會被自動展平),長度必須與x和y決定的插值點個數一致;
kind:插值方式,有三種可選,分別是'linear'(線性插值)、'cubic'(三次樣條插值)、'quintic'(五次樣條插值);
copy、bounds_error、fill_value三個參數用法和一維插值基本一樣,不過fill_value只有固定填充值和外插兩種方式。
二維插值api的用法一樣很簡單,下面就是官方文檔中給出的例子:
>>> from scipy import interpolate >>> x = np.arange(-5.01, 5.01, 0.25) >>> y = np.arange(-5.01, 5.01, 0.25) >>> xx, yy = np.meshgrid(x, y) #生成網格點,不了解用法的話可以直接查,資料很多 >>> z = np.sin(xx**2+yy**2) >>> f = interpolate.interp2d(x, y, z, kind='cubic') >>> import matplotlib.pyplot as plt >>> xnew = np.arange(-5.01, 5.01, 1e-2) >>> ynew = np.arange(-5.01, 5.01, 1e-2) >>> znew = f(xnew, ynew) >>> plt.plot(x, z[0, :], 'ro-', xnew, znew[0, :], 'b-') >>> plt.show()
以上就是interp2d的簡單用法。