个性化阅读
专注于IT技术分析

SciPy插值运算如何实现?

插值定义为在直线或曲线上的两个点之间找到一个值。单词的第一部分是” inter”, 意思是” enter”, 它指示我们查看数据内部。换句话说, “将精确数据点之间的中间值的估计称为内插”。插值在统计, SciPy和商业中, 或者在需要预测两个现有数据点中存在的值时非常有用。

让我们看看如何使用scipy.interpolation包进行插值。

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = 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.29634775  0.21191783  0.80382736  0.95857746
  0.14971294 -0.92731369 -0.39972072  0.97296947]

我们可以将这些数组绘制为空间中点的二维, 让我们考虑以下示例:

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = np.linspace(0, 5, 10)
y = np.cos(x**2/3+4)
plt.plot(x, y, 'r')
plt.show()

输出

SciPy插值

一维插值

scipy.interpolation提供了interp1d类, 该类是基于固定数据点创建函数的有用方法。

通过使用以上数据, 创建一个插值函数并绘制一个新的插值图。

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
fun1 = 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线性
  • 二次方的
  • 立方体

花键

样条线是一个柔性条, 用于通过一组指定的点生成平滑曲线。样条插值需要两个基本步骤。第一步, 计算曲线的样条曲线表示, 第二步, 在所需点评估样条曲线。

SciPy插值

有两种表示曲线的方法。首先, 直接样条方法用于使用函数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 plt
import numpy as np
from scipy.interpolate import UnivariateSpline
x = 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插值

赞(0)
未经允许不得转载:srcmini » SciPy插值运算如何实现?

评论 抢沙发

评论前必须登录!