使用 SciPy 庫比較“三次”和“線性”1-D 插值


以下 Python 指令碼將使用 SciPy 庫在同一資料上比較“三次”和“線性”插值 −

示例

我們首先生成一些資料,對這些資料進行插值 −

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_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()

更新於:2021 年 11 月 24 日

266 次瀏覽

職業生涯助力

完成課程即可獲得證書認證

開始學習
廣告
© . All rights reserved.