Python での 2 次元補間

この記事では、Python で補間を行う方法を示し、さまざまな 2D 実装を検討します。scipy.interpolate.interp2d、numpy.meshgrid、Python で使用されるスムージング/補間用の放射基底関数 (RBF) など、二変量内挿に役立つ関数について説明します。

簡単にするために、SciPy ライブラリと Numpy ライブラリを使用して補間を実装します。


scipy.interpolate.interp2d を使用して Python で 2D 補間を作成する

まず、与えられたデータ ポイント間にデータ ポイントを構築する手法である補間について学びましょう。2 つの点、たとえば 1 と 2 があるとします。

この例では、補間して点 1.22 と 1.44 などを見つけることができます。

補間は、代入として知られるデータセット内の欠落データを埋めるために機械学習でよく使用されます。補間は、データセットのポイントをより均一にするためによく使用されます。

scipy.interpolateこのモジュールを使用して Python で補間を処理する例を見てみましょう。

interp2d は、interp1d 関数を直接一般化したものです。この関数は、利用可能なデータ ポイントの x 座標と y 座標を個別の 1D 配列として取得し、x 座標と y 座標の各ペアの値を 2D 配列として取得します。

データ ポイントは、x 座標と y 座標の規則的で均一なグリッド上にあると想定されます。一般的な関数形式は次のとおりです。

class scipy.interpolate.interp2d(x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=None)

ここで、x、y、z は配列であり、種類は{'linear', 'cubic', 'quintic'}オプションのままにすることも、そのままにすることもできます。

#import libraries
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt

# x,y arrays
x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)  #see details below for 'np.meshgrid'

#approximate function which is z:= f(x,y)
z = np.sin(xx**2+yy**2)
fun = interpolate.interp2d(x, y, z, kind='linear') # kind could be {'linear', 'cubic', 'quintic'}
xnew = np.arange(-5.01, 5.01, 1e-2)
ynew = np.arange(-5.01, 5.01, 1e-2)
znew = fun(xnew, ynew)

plt.plot(x, z[0, :], 'go-', xnew, znew[0, :], 'b-')
plt.show()

出力:

scipy補間interp2d

%> 请注意、グリッドの作成には numpy.meshgrid を使用しました。デカルト インデックスまたは行列インデックスを表す 2 つの 1D 配列を使用して長方形グリッドを作成できます。

一般的な関数形式は次のとおりです。

numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')

xi は 1 次元の座標配列 x1,x2,...,xn を表します。


scipy.interpolate.Rbf を使用して Python で内挿用の放射基底関数を作成する

このタイプの補間は、n 次元の散乱データの場合に使用され、これには scipy.interpolate.Rbf を使用します。

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate.rbf import Rbf  # radial basis functions

# x y arrays
x = [1, 1, 2 ,3, 4, 4, 2, 6, 7]
y = [0, 2, 5, 6, 2, 4, 1, 5, 2]
z = [1]*len(x)

#RBF Func
rbf_fun = Rbf(x, y, z, function='gaussian')

x_new = np.linspace(0, 8, 81)
y_new = np.linspace(0, 8, 82)

x_grid, y_grid = np.meshgrid(x_new, y_new)
z_new = rbf_fun(x_grid.ravel(), y_grid.ravel()).reshape(x_grid.shape)

plt.pcolor(x_new, y_new, z_new);
plt.plot(x, y, 'o');
plt.xlabel('x'); plt.ylabel('y');
plt.title('RBF Gaussian interpolation');

出力:

動径基底関数

これらの補間関数は、動径基底関数 (RBF) を使用して ND 散乱データを MD に変換します。散乱した n 次元データは、RBF 補間を使用して平滑化および補間できます。

ただし、データの範囲外の値が取得されるなど、外挿が行われる可能性があるため、注意して行う必要があります。

おすすめ

転載: blog.csdn.net/fengqianlang/article/details/131505745