插值定义为在直线或曲线上的两个点之间找到一个值。单词的第一部分是”
inter”
, 意思是”
enter”
, 它指示我们查看数据内部。换句话说, “
将精确数据点之间的中间值的估计称为内插”
。插值在统计, SciPy和商业中, 或者在需要预测两个现有数据点中存在的值时非常有用。
让我们看看如何使用scipy.interpolation包进行插值。
import numpy as npfrom scipy import interpolateimport matplotlib.pyplot as pltx = np.linspace(0, 5, 10) y = np.cos(x**2/3+4)print(x, y)
它将以数组形式给出以下输出。 np.linspace()函数返回给定数字之间的间隔。
输出
[0.0.55555556 1.11111111 1.66666667 2.22222222 2.77777778 3.33333333 3.88888889 4.44444444 5.] [-0.65364362 -0.57246439 -0.296347750.211917830.803827360.958577460.14971294 -0.92731369 -0.399720720.97296947]
我们可以将这些数组绘制为空间中点的二维, 让我们考虑以下示例:
import numpy as npfrom scipy import interpolateimport matplotlib.pyplot as pltx = np.linspace(0, 5, 10)y = np.cos(x**2/3+4)plt.plot(x, y, 'r')plt.show()
输出
文章图片
一维插值
scipy.interpolation提供了interp1d类, 该类是基于固定数据点创建函数的有用方法。
通过使用以上数据, 创建一个插值函数并绘制一个新的插值图。
import numpy as npfrom scipy.interpolate import interp1dimport matplotlib.pyplot as pltfun1 = interp1d(x, y, kind = 'linear')fun2 = interp1d(x, y, kind = 'cubic')xnew = np.linspace(0, 4, 30)plt.plot(x, y, 'o', xnew, fun1(xnew), '-', xnew, fun2(xnew), '--')plt.legend(['data', 'linear', 'cubic', 'nearest'], loc = 'best')plt.show()
【SciPy插值运算如何实现()】输出
文章图片
在上面的程序中, 我们创建了两个函数fun1和fun2。变量x包含采样点, 变量y包含相应的值。第三种变量类型表示插值技术的类型。有多种插值方法。这些方法如下:
- 线性的
- 最近的
- 零
- S线性
- 二次方的
- 立方体
样条线是一个柔性条, 用于通过一组指定的点生成平滑曲线。样条插值需要两个基本步骤。第一步, 计算曲线的样条曲线表示, 第二步, 在所需点评估样条曲线。
文章图片
有两种表示曲线的方法。首先, 直接样条方法用于使用函数splrep()在二维平面中找到曲线的样条表示。默认样条顺序为三次, 但可以使用输入关键字k更改。
splprep()允许我们在N维空间中参数定义曲线。关键字参数用于指定样条拟合期间要执行的平滑量。
标准输出是一个三元组(t, c, k), 其中, t表示结点, c表示系数, k表示样条曲线的阶数。
单变量样条
scipy.interpolate提供UnivariateSpline类, 这是一种基于固定数据点创建函数的合适方法。语法如下:
scipy.interpolate.UnivariateSpline(x, y, w = None, bbox = [None, None], k = 3, s = None, ext = 0, check_finite = False).
参数-
w-指定样条拟合的权重。它必须是积极的。
s-通过指定平滑条件来指定结数(点)。
k-表示平滑样条曲线的程度。必须为k < =5。默认情况下, k = 3, 三次样条。
- Ext-它控制不在结序列定义的间隔内的元素的外推模式。
- 如果ext = 0或’ extrapolate’ , 则返回外推值。
- 如果ext = 1或” 零” , 则返回0
- 如果ext = 2或’ raise’ , 则引发ValueError
- 如果ext =’ const’ 的3, 则返回边界值。
- check_finite-检查输入数组是否仅包含有限数字。
import matplotlib.pyplot as pltimport numpy as npfrom scipy.interpolate import UnivariateSplinex = np.linspace(-3, 3, 50)y = np.exp(-x**2) + 0.1 * np.random.randn(50)plt.plot(x, y, 'ro', ms = 5)plt.show()
输出
文章图片
推荐阅读
- SciPy稀疏矩阵介绍和示例
- SciPy正交距离回归(ODR)介绍和用法
- SciPy如何计算线性代数(这里有详细解释————)
- SciPy安装详细步骤图解
- HBase 安装snappy压缩软件以及相关编码配置
- applicationContext-redis.xml
- DG duplicate报错:RMAN-05001:auxiliary file name /u01/app/oracle/oradata/fratbs01.dbf conflicts with a
- web测试与app测试的区别(转)
- AutoMapper使用