使用 SciPy 库比较"三次"和"线性"一维插值

scipyscientific computingprogramming

下面的 Python 脚本将比较‘三次’和‘线性’使用 SciPy 库对相同数据进行插值 −

示例

首先让我们生成一些数据来实现对该 − 的插值

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
A = np.linspace(0, 10, num=11, end=True)
B = np.cos(-A**2/9.0)
print (A, B)

输出

上述脚本将在 0 到 4 − 之间生成以下点

[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] [ 1. 0.99383351 0.90284967 0.54030231 -0.20550672 -0.93454613 -0.65364362 0.6683999 0.67640492 -0.91113026 0.11527995]

现在,让我们按如下方式绘制这些点 −

plt.plot(A, B, '.')
plt.show()

现在,基于固定数据点,我们需要创建两个插值函数 - 一个用于‘线性’,另一个用于‘三次’。让我们创建它 −

function_interpolate1 = interp1d(A, B, kind = 'linear')
function_interpolate2 = interp1d(A, B, kind = 'cubic')

为了看到两种插值的明显差异,我们将使用与旧输入相同的函数创建一个更长的新输入 −

Anew = np.linspace(0, 10, num=30, endpoint=True)
plt.plot(A, B, 'x', Anew, function_interpolate1(Anew), '-',
Anew,function_interpolate2(Anew), '--')
plt.legend(['data', 'linear', 'cubic'], loc = 'best')
plt.show()


相关文章