Yamamoto's Laboratory
補間

はじめに

使ってみよう

データをスプライン関数で補間するプログラム()

001   # -*- coding: utf-8 -*-
002   import numpy as np
003   import matplotlib.pyplot as plt
004   from scipy import interpolate
005   
006   # ===========================================================
007   # 補完のクラス
008   # ===========================================================
009   class INTERPOLATE(object):
010       # -------------------------------------------------------
011       # コンストラクター
012       # -------------------------------------------------------
013       def __init__(self, x, y):
014           self.x = x
015           self.y = y
016   
017       # -------------------------------------------------------
018       # 補間の実行
019       # -------------------------------------------------------
020       def do_interpolate(self):
021           self.f = interpolate.InterpolatedUnivariateSpline(self.x, self.y)
022   
023       # -------------------------------------------------------
024       # 補間結果のプロット
025       # -------------------------------------------------------
026       def plot(self, Nx=65):
027           xmin, xmax = min(self.x), max(self.x)
028           xp = np.linspace(xmin, xmax, Nx)
029           fig = plt.figure()
030           plot = fig.add_subplot(1,1,1)
031           plot.set_xlabel("x", fontsize=12, fontname='serif')
032           plot.set_ylabel("y", fontsize=12, fontname='serif')
033           plot.tick_params(axis='both', length=10, which='major')
034           plot.tick_params(axis='both', length=5,  which='minor')
035           plot.set_xlim(0, 2*np.pi)
036           plot.set_ylim([-1.2,1.2])
037           plot.minorticks_on()
038           plot.plot(xp, self.f(xp), 'b-')
039           plot.plot(x, y, 'ro', markersize=10)
040           fig.tight_layout()
041           plt.show()
042           fig.savefig('result.pdf', orientation='portrait', \
043                            transparent=False, bbox_inches=None, frameon=None)
044           fig.clf()
045   
046   # -------------------------------------------------------
047   # メイン関数
048   # -------------------------------------------------------
049   if __name__ == "__main__":
050   
051       x = np.linspace(0, 2*np.pi, 17)
052       y = np.sin(x)
053   
054       fit = INTERPOLATE(x, y)
055       fit.do_interpolate()
056       fit.plot(Nx=127)
057       

図1: 赤丸は元データ,実線は補間の結果.

InterpolatedUnivariateSpline

scipy.interpolate.InterpolatedUnivariateSpline(
      x, y, w=None, bbox=[None, None], k=3, ext=0, check_finite=False)
x : (N,) array_like
データの配列.一様増加である必要があります.
y : (N,) array_like
データの配列.
w : (N,) array_like, optional
フッティング時の重み配列.正の値である必要があります.設定しない場合 (デフォルト) は,全てのデータ点の重みは等しくなります.
bbox : (2,) array_like, optional
フィッティングの両端 (x軸) を決める2つのシーケンス.デフォルトは,bbox=[x[0], x[-1]] で,インプットの両端です.
k : int, optional
スプラインフィッティングの次元で, 1 <= k <= 5 である必要があります.デフォルトは,k=3 (cubic spline) です.
ext : int or str, optional
外挿の設定です.
  • if ext=0 or ‘extrapolate’, 外挿の値です.
  • if ext=1 or ‘zeros’, ゼロです.
  • if ext=2 or ‘raise’, ValueError になります.
  • if ext=3 of ‘const’, 境界の値です..
デフォルトは 0 です.
check_finite : bool, optional
入力配列に無意味 (inf) な値の有無のチェックします. 無効 (False) にするとパフォーマンスが向上する可能性がありますが,入力に無限大 (inf) または 非数 (NaN) が含まれていると問題が発生する可能性があります.デフォルトはFalseです.

SciPy のいろいろな補間

一変数(一次元)

一変数 (一次元) の補間モジュール
一変数補間モジュール 補間の内容
interp1d(x, y[, kind, axis, copy, ...]) 1次元の補間関数
BarycentricInterpolator(xi[, yi, axis]) 点の集合の補間多項式
KroghInterpolator(xi, yi[, axis]) ひとつの点集合の補間多項式
PchipInterpolator(x, y[, axis, extrapolate]) 区分的三次エルミート内挿多項式
barycentric_interpolate(xi, yi, x[, axis]) 多項式補間
krogh_interpolate(xi, yi, x[, der, axis]) 多項式補間
pchip_interpolate(xi, yi, x[, der, axis]) 区分的3次エルミート内挿多項式 (PCHIP) 補間
Akima1DInterpolator(x, y[, axis]) Akima 補間
CubicSpline(x, y[, axis, bc_type, extrapolate]) 3次スプライン補間
PPoly(c, x[, extrapolate, axis]) 係数とブレークポイントによる区分的多項式
BPoly(c, x[, extrapolate, axis]) 係数とブレークポイントによる区分的多項式

多変数(多次元)

非構造データ

非構造データの多変数 (多次元) の補間モジュール
多変数補間モジュール 補間の内容
interp1d(x, y[, kind, axis, copy, ...]) 1次元の補間関数
griddata(points, values, xi[, method, ...]) Interpolate unstructured D-dimensional data.
LinearNDInterpolator(points, values[, ...]) Piecewise linear interpolant in N dimensions.
NearestNDInterpolator(points, values) Nearest-neighbour interpolation in N dimensions.
CloughTocher2DInterpolator(points, values[, tol]) Piecewise cubic, C1 smooth, curvature-minimizing interpolant in 2D.
Rbf(*args) A class for radial basis function approximation/interpolation of n-dimensional scattered data.
interp2d(x, y, z[, kind, copy, ...]) Interpolate over a 2-D grid.

グリッドデータ

グリッドデータの多変数 (多次元) の補間モジュール
グリッドデータ多変数補間モジュール 補間の内容
interpn(points, values, xi[, method, ...]) 長方形グリッド上の多次元の補間
RegularGridInterpolator(points, values[, ...]) 任意次元の長方形グリッド上の補間
RectBivariateSpline(x, y, z[, bbox, kx, ky, s]) 長方形メッシュ上の2変数スプライン近似

その他

その他の多変数 (多次元) の補間モジュール
その他の多変数補間モジュール 補間の内容
NdPPoly(c, x[, extrapolate]) 区分的テンソル積多項式

ページ作成情報

参考資料

更新履歴

2017年08月9日 新規作成


no counter