Python での 3D 補間

Zeeshan Afridi 2023年6月21日
  1. 補間の重要性
  2. Python で補間用の SciPy をインストールする
  3. Python での 3D 補間に SciPy の interpn() メソッドを使用する
  4. Python での 3D 補間には RegularGridInterpolator を使用する
  5. まとめ
Python での 3D 補間

補間は、離散セットの定義された範囲内に新しいデータ ポイントを構築する方法です。 補間とは、ポイントまたはカーブ間の値を見つけることを意味します。

数学的な観点からは、補間とは、他の既知のデータ ポイントの間にある特定の未知のデータ ポイントの値を取得することです。

補間の重要性

内挿は、予測、データ分析、およびその他の多くのアプリケーションを行うための強力なツールです。 騒音レベル、降雨量、標高などの地理関連データの不明な値を予測します。

補間には多くの用途があります。 機械学習 (ML) では、データセット内の欠落データを処理することが多く、それらの値を置き換えるために補間がよく使用されます。

Python で補間用の SciPy をインストールする

Python で補間を使用するには、SciPy コア ライブラリ、より具体的には interpolation モジュールを使用する必要があります。

SciPy は、数学的処理とデータ分析の最適化に役立つ多くの機能を提供します。 1 次元、2 次元、および 3 次元の補間を取得するための便利な関数を提供します。

先に進むには、SciPy ライブラリを Python にインストールする方法を知る必要があります。

SciPy をインストールするには、コマンド ライン インターフェイスに移動し、次のコマンドを入力します。

pip install scipy

正常にインストールされたら、import キーワードを使用して Python プログラムにインポートできます。

Python での 3D 補間に SciPy の interpn() メソッドを使用する

SciPy ライブラリの interpn() メソッドを使用して 3D 補間を実行できます。 これは、この方法を使用して 3つ以上の次元を見つけることができることを意味します。

interpn() 関数の構文:

scipy.interpolate.interpn(
    points, values, xi, method="linear", bounds_error=True, fill_value=nan
)

interpn() 関数のパラメータ:

  1. points: float の ndarray のタプルで、(m1, ),…,(mn, ) の形をしています。

    n 次元の規則的なグリッドは、これらのポイントによって定義されます。 各次元のポイント (つまり、ポイント タプルのすべての要素) は厳密に昇順または降順でなければなりません。

  2. values: 配列のような形状 (m1,…,mn,…).

    データは n 次元の通常のグリッドにあります。 複雑なデータも許容できます。

  3. xi : (…,ndim) の形の ndarray

    これは、グリッド化されたデータをサンプリングするための座標がある場所です。

  4. メソッド: str、オプション

    補間の方法は、linearnearest、および splinef2d です。 splinef2d は 2D データでのみサポートされています。

  5. bounds_error: bool、オプション

true の場合、補間された値が入力データのドメイン外から要求されると、`ValueError` が発生します。 false の場合、`fill_value` が使用されます。
  1. fill_value: 数値、オプション

数値を指定すると、関数は補間ドメイン外のポイントを使用できます。 None の場合、ドメイン外の値は外挿されます。 メソッド splinef2d は外挿をサポートしていません。

interpn() メソッドは values_x: ndarray, shape xi.shape[:-1] + values.shape[ndim:] を返します。 補間された values.ndarray は、各次元の形状の長さと ndim が次元の数である多次元コンテナーです。

これで、interpn() 関数とそのパラメーターについて理解できました。 その実用的な例を挙げましょう。

この例では、interpn() メソッドに 3つの引数を渡します。

コード例:

# import libraries
from scipy.interpolate import interpn
import numpy as np

# define a function to get the value


def v_function_3d(x, y, z):
    return 3 * x + 4 * y - z


# the np.linspace() function returns the interval between the given numbers.
x = np.linspace(0, 4, 5)
y = np.linspace(0, 5, 6)
z = np.linspace(0, 6, 7)

# in three dimensions, a point's coordinates are treated collectively as a single object.
points = (x, y, z)

# meshgrid, it changes NumPy arrays into coordinate matrices or grids of values
values = v_function_3d(*np.meshgrid(*points, indexing="ij"))

# coordinates to sample the gridded data are
point = np.array([2.21, 3.12, 1.15])

# evaluate the 3d interpolating function at a point
print(interpn(points, values, point))

出力:

[17.96]

Python での 3D 補間には RegularGridInterpolator を使用する

クラスRegularGridInterpolatorを使用して、任意の数の次元の規則的または直線的なグリッドでの補間が実行されます。

データを定義するには、直線グリッド、または間隔が規則的または不均等な長方形グリッドが必要です。 線形補間、最近傍補間、スプライン補間をサポートしています。

補間オブジェクトを設定した後、補間方法を選択できます。

周囲の格子点を直線的に補間して補間する場合は、RegularGridInterpolator を使用します。 等間隔にデータを入力してください。

次の例は、補間に RegularGridInterpolator を使用する方法を説明しています。

# import libraries
import scipy.interpolate as reg_grid
import numpy as np

# define a function to get value


def v_function_3d(x, y, z):
    return 2 * x + 3 * y - z


# define an interpolating function
RGI = reg_grid.RegularGridInterpolator

# arrays constituting the 3d grid
x = np.linspace(0, 50, 50)
y = np.linspace(0, 50, 50)
z = np.linspace(0, 50, 50)

# in three dimensions, a point is a number (coordinates) that are treated collectively as a single object.
points = (x, y, z)

# meshgrid, it changes NumPy arrays into coordinate matrices or grids of values
vals = v_function_3d(*np.meshgrid(*points, indexing="ij"))

# make the interpolator
rgi = RGI(points, values=vals)
pnt = (2.5, 3.5, 1.5)
print(rgi(pnt))

出力:

13.999999999999998

まとめ

scipy ライブラリとそのメソッド interpn() または RegularGridInterpolator の助けを借りて、Python で 3D 補間を使用できます。 予測、データ分析、および他の多くのアプリケーションを簡単に作成できます。

補間は、ユーザーが収集されたデータの外に存在する可能性のあるデータを判断するのに役立ちます。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn