SciPy 插值
在本文中,我们将使用 Python 中的 SciPy 模块学习插值。首先,我们将讨论插值及其类型和实现。
插值及其类型
插值是一种在给定数据点之间构建数据点的技术。 scipy.interpolate 是 Python SciPy 中的一个模块,由类、样条函数以及一元和多元插值类组成。插值有多种方式,其中包括:
- 一维插值
- 样条插值
- 一元样条插值
- 径向基函数插值
让我们逐一讨论所有的方法,并将结果可视化。
一维插值
为了创建基于固定数据点的函数,使用scipy . INTERPOL . interp 1d。它接受数据点 x 和 y,并返回一个可以用新的 x 调用的函数,然后返回相应的 y 点。
语法:scipy . interpolate . interp 1d(x,y,kind,axis,copy,bounds_error,fill_value,假定 _sorted)
计算机编程语言
# Import the required Python libraries
import matplotlib.pyplot as plt
from scipy import interpolate
import numpy as np
# Initialize input values x and y
x = np.arange(0, 10)
y = x**2
# Interpolation
temp = interpolate.interp1d(x, y)
xnew = np.arange(0, 9, 0.2)
ynew = temp(xnew)
plt.title("1-D Interpolation")
plt.plot(x, y, '*', xnew, ynew, '-', color="green")
plt.show()
输出:
样条插值
在样条插值中,计算曲线的样条表示,然后在所需的点计算样条。函数 splrep 用于在二维平面中寻找曲线的样条表示。
- 为了找到一维曲线的 B 样条表示,使用scipy . interpolate . SPREP。
语法:scipy . interpolate . SPREP(x,y,w,xb,xe,k,task,s,t,full_output,per,quiet)
- 为了计算 B 样条或其导数,使用scipy . INTERPOL . splev。
语法:scipy . interpret . splev(x,tck,der,ext)
计算机编程语言
# Import the required Python libraries
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
# Initialize the input values
x = np.arange(0, 10)
y = np.cos(x**3)
# Interpolation
# To find the spline representation of a
# curve in a 2-D plane using the function
# splrep
temp = interpolate.splrep(x, y, s=0)
xnew = np.arange(0, np.pi**2, np.pi/100)
ynew = interpolate.splev(xnew, temp, der=0)
plt.figure()
plt.plot(x, y, '*', xnew, ynew, xnew, np.cos(xnew),
x, y, 'b', color="green")
plt.legend(['Linear', 'Cubic Spline', 'True'])
plt.axis([-0.1, 6.5, -1.1, 1.1])
plt.title('Cubic-spline Interpolation in Python')
plt.show()
输出:
单变量样条
它是一个适合一组给定数据点的一维平滑样条。scipy . interpole . Univariaespline用于将 k 度的样条 y = spl(x)拟合到所提供的 x,y 数据。s 通过指定平滑条件来指定结的数量。使用给定的平滑因子 s 和在最后一次调用中找到的节点进行的样条计算。
语法:scipy . interpolate . univariaespline(x,y,w,bbox,k,s,ext)
计算机编程语言
# Import the required libraries
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
x = np.linspace(-3, 3, 50)
y = np.exp(-x**2) + 0.1 * np.random.randn(50)
plt.title("Univariate Spline")
plt.plot(x, y, 'g.', ms=8)
# Using the default values for the
# smoothing parameter
spl = UnivariateSpline(x, y)
xs = np.linspace(-3, 3, 1000)
plt.plot(xs, spl(xs), 'green', lw=3)
# Manually change the amount of smoothing
spl.set_smoothing_factor(0.5)
plt.plot(xs, spl(xs), color='black', lw=3)
plt.show()
输出:
插值的径向基函数
scipy . interpret . Rbf用于对 n 维的散乱数据进行插值。径向基函数被定义为对应于固定的参考数据点。scipy . interpret . Rbf是一类径向基函数插值,用于将函数从二维散乱数据插值到三维区域。
语法:scipy . INTERPOL . Rbf(* args)
计算机编程语言
# Import the required libraries
import numpy as np
from scipy.interpolate import Rbf
import matplotlib.pyplot as plt
# setup the data values
x = np.linspace(0, 10, 9)
y = np.cos(x/2)
xi = np.linspace(0, 10, 110)
# Interpolation using RBF
rbf = Rbf(x, y)
fi = rbf(xi)
plt.subplot(2, 1, 2)
plt.plot(x, y, '*', color="green")
plt.plot(xi, fi, 'green')
plt.plot(xi, np.sin(xi), 'black')
plt.title('Radial basis function Interpolation')
plt.show()
输出: