前言:
此时大家对“pythonscipy使用”大致比较注意,姐妹们都想要了解一些“pythonscipy使用”的相关知识。那么小编也在网摘上网罗了一些关于“pythonscipy使用””的相关内容,希望同学们能喜欢,我们一起来学习一下吧!插值,是依据一系列的点(xi,yi)通过一定的算法找到一个合适的函数来包含(逼近)这些点,反应出这些点的走势规律,然后根据走势规律求其他点值的过程。
scipy.interpolate包里有很多类可以实现对一些已知的点进行插值,即找到一个合适的函数,例如,interp1d类,当得到插值函数后便可用这个插值函数计算其他xj对应的的yj值了,这也就是插值的意义所在。
一维插值interp1d
interp1d类可以根据输入的点,创建拟合函数。
准备数据
让我们首先创建一些点,作为输入:
示例
通过采样几个点获取数据:
import numpy as npfrom scipy import interpolate as intpimport matplotlib.pyplot as pltx = np.linspace(0, 4, 12)y = np.cos(x**2/3 + 4)print (x)print (y)
输出
[0. 0.36363636 0.72727273 1.09090909 1.45454545 1.81818182 2.18181818 2.54545455 2.90909091 3.27272727 3.63636364 4. ][ 0.28366219 0.29287074 0.35652484 0.52035398 0.78524277 0.99671469 0.70096272 -0.43008856 -0.87804302 0.84953035 -0.4614798 0.4979562 ]
让我们画出这些点:
plt.plot(x, y,’o’)plt.show()interp1d 插值
根据上面示例中的数据,使用interp1d类创建拟合函数:
f1 = intp.interp1d(x, y, kind = 'linear')f2 = intp.interp1d(x, y, kind = 'cubic')
上面创建了两个函数f1和f2。通过这些函数,输入x可以计算y。kind表示插值使用的技术类型,例如:’Linear’, ‘Nearest’, ‘Zero’, ‘Slinear’, ‘Quadratic’, ‘Cubic’等等。
现在,增加输入数据,与前面示例比较一下:
xnew = np.linspace(0, 4, 30)plt.plot(x, y, 'o', xnew, f1(xnew), '-', xnew, f2(xnew), '--')plt.legend(['data', 'linear', 'cubic','nearest'], loc = 'best')plt.show()
上面的程序将生成以下输出:
噪声数据插值
可以通过interpolate模块中UnivariateSpline类对含有噪声的数据进行插值运算。
使用UnivariateSpline类,输入一组数据点,通过绘制一条平滑曲线来去除噪声。绘制曲线时可以设置平滑参数s,如果参数s=0,将对所有点(包括噪声)进行插值运算,也就是说s=0时不去除噪声。
示例
import numpy as npimport matplotlib.pyplot as pltfrom scipy.interpolate import UnivariateSplinex = np.linspace(-3, 3, 50)y = np.exp(-x**2) + 0.1 * np.random.randn(50) # 通过random方法添加噪声数据plt.plot(x, y, 'ro', ms=5)# 平滑参数使用默认值spl = UnivariateSpline(x, y)xs = np.linspace(-3, 3, 1000)plt.plot(xs, spl(xs), 'b', lw=3) # 蓝色曲线# 设置平滑参数spl.set_smoothing_factor(0.5)plt.plot(xs, spl(xs), 'g', lw=3) # 绿色曲线# 设置平滑参数为0spl.set_smoothing_factor(0)plt.plot(xs, spl(xs), 'yellow', lw=3) # 黄色曲线plt.show()
输出
标签: #pythonscipy使用