セクション
補間は、これらの点の(近似)を含むように、特定のアルゴリズムを介して適切な機能を見つけるために一連の点(XI、YI)に基づいており、これらの点は、法律の傾向、トレンド値点ルールに従って他のシーク処理を反映しています。
補間関数は、補間関数後の値を、対応する他のコンピューティング・YJのXJを得るために使用することができる場合scipy.interpolateパッケージは、例えば、interp1dクラス、適切な機能を見つけるために、すなわち、いくつかの既知の補間点にいくつかのクラスを実装することができこれは、補間の意義です。
一次元補間interp1d
interp1d点入力はフィッティング関数を作成することにより調製することができます。
データを準備します
入力として、いくつかのポイントを作成してみましょう:
例
データは、いくつかの点をサンプリングすることによって得られました:
import numpy as np
from scipy import interpolate as intp
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 12)
y = np.cos(x**2/3 + 4)
print (x)
print (y)
輸出
[0. 0.36363636 0.72727273 1.09090909 1.45454545 1.81818182
2.18181818 2.54545455 2.90909091 3.27272727 3.63636364 4. ]
[ 0.28366219 0.29287074 0.35652484 0.52035398 0.78524277 0.99671469
0.70096272 -0.43008856 -0.87804302 0.84953035 -0.4614798 0.4979562 ]
私たちはこれらの点を描画してみましょう:
plt.plot(x, y,’o’)
plt.show()
interp1d補間
上記の例では、データ、作成するinterp1dクラスを使用してフィッティング関数:
f1 = intp.interp1d(x, y, kind = 'linear')
f2 = intp.interp1d(x, y, kind = 'cubic')
上記の2つの関数f1とf2を作成します。これらの機能により、入力xは、Yを算出することができます。kind
これは、例えば、使用される補間技法の種類を示す:「リニア」、「最も近い」 、「ゼロ」、「Slinear」、「二次」、「キュービック」 等が挙げられます。
さて、入力データの増加、およびそれ以前の例を比較します。
xnew = np.linspace(0, 4, 30)
plt.plot(x, y, 'o', xnew, f1(xnew), '-', xnew, f2(xnew), '--')
plt.legend(['data', 'linear', 'cubic','nearest'], loc = 'best')
plt.show()
上記の手順は、以下の出力を生成します。
騒音データ補間
補間は、ノイズ補間モジュールUnivariateSplineクラスを含むデータであってもよいです。
使用UnivariateSplineクラス、入力データポイントのセットは、ノイズが滑らかな曲線を描くことによって除去されます。ノイズが除去されていない場合に平滑化パラメータs = 0、即ちS、パラメータs = 0の場合、曲線を描画するとき、すべての点は(ノイズを含む)であろう補間演算を設けてもよいです。
例
import numpy as np
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) # 通过random方法添加噪声数据
plt.plot(x, y, 'ro', ms=5)
# 平滑参数使用默认值
spl = UnivariateSpline(x, y)
xs = np.linspace(-3, 3, 1000)
plt.plot(xs, spl(xs), 'b', lw=3) # 蓝色曲线
# 设置平滑参数
spl.set_smoothing_factor(0.5)
plt.plot(xs, spl(xs), 'g', lw=3) # 绿色曲线
# 设置平滑参数为0
spl.set_smoothing_factor(0)
plt.plot(xs, spl(xs), 'yellow', lw=3) # 黄色曲线
plt.show()
輸出