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的简单用法。

posted @ 2019-08-16 08:53  xsxsz  阅读(4014)  评论(0编辑  收藏  举报