python玄學建模(5):插值(二維)


官方文檔鏈接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d

這篇博客接着上次的scipy一維插值,講講二維插值api的用法

scipy庫中可以通過interp2d類來實現一維插值

類原型:class scipy.interpolate.interp2d(xyzkind='linear'copy=Truebounds_error=Falsefill_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的簡單用法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM