如何使用 SciPy 库实现“三次”1-D 插值?
要使用 SciPy 实现“三次”1-D 插值,我们需要在 scipy.interpolate.interp1d 类的“kind”参数中将插值类型指定为“三次”。让我们看以下示例来理解它 -
示例
首先我们生成一些数据,然后对其进行插值 -
import numpy as np from scipy.interpolate import interp1d import matplotlib.pyplot as plt A = np.linspace(0, 10, num=11, endpoint=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_interpolate = interp1d(A, B, kind = 'cubic') #providing ‘cubic’ in the parameter ‘kind’.
为了清楚地看到插值的差异,我们将使用与旧输入相同的函数创建一个新输入,其长度更大 -
Anew = np.linspace(0, 10, num=30, endpoint=True) plt.plot(A, B, '.', Anew, function_interpolate(Anew), '--') plt.legend(['data', 'cubic'], loc = 'best') plt.show()
广告