interpolate3d_fft.py のソースコード解析に基づいた、Sphinx(MyST)でビルド可能なMarkdownドキュメントを以下に示します。
interpolate3d_fft.py ドキュメント
ファイル概要
ファイル名:
interpolate3d_fft.py説明: 3次元周期データのFFTを用いた補間処理を提供します。
このモジュールは、フーリエ変換とゼロパディングを利用して、3次元空間に周期的に配置された離散データを高解像度化するための関数を含みます。主に科学技術計算や画像処理の分野で、データの補間やアップサンプリングに利用されます。
目的: 3次元の等間隔周期データをFFT(高速フーリエ変換)を用いて補間し、高解像度化すること。 関連ドキュメントとして
interpolate3d_fft_usageが参照されています。
非標準ライブラリ
このプログラムは、以下の非標準ライブラリを使用します。
numpy(np): 高度な数値計算、特に多次元配列(NumPy配列)の効率的な操作を可能にします。データの生成、形状操作、要素ごとの計算などに使用されます。matplotlib.pyplot(plt): 2Dグラフの描画機能を提供します。本プログラムでは、補間前後のデータの2次元スライスを画像として表示するために使用されます。mpl_toolkits.mplot3d.Axes3D:matplotlibの3Dプロット機能を提供します。3次元空間におけるデータ点の散布図や表面プロットを描画するために使用されます。scipy.fft: SciPyライブラリのフーリエ変換モジュールで、高速フーリエ変換 (FFT) および逆フーリエ変換 (IFFT) の関数を提供します。具体的には、以下の関数が使用されます。fftn(): N次元FFTを実行します。ifftn(): N次元IFFTを実行します。fftshift(): FFTのゼロ周波数成分を配列の中心にシフトします。ifftshift():fftshift()の逆操作を行い、ゼロ周波数成分を元の位置に戻します。
関数
interpolate_3d_periodic_data_fft()
3次元の等間隔周期データをFFT(高速フーリエ変換)で補間します。
この関数は、与えられた3次元データをフーリエ変換(FFT)により周波数領域に変換します。周波数領域において、元のデータが占める領域以外の部分をゼロで埋める(ゼロパディング)ことで、より高周波数成分がゼロであると仮定し、実空間での高解像度補間を実現します。ゼロパディングされた周波数領域データに逆フーリエ変換(IFFT)を適用することで、指定された補間倍率でサンプリングされた高解像度のデータが得られます。補間は周期境界条件を仮定して行われます。 fftshift と ifftshift を使用して、FFTのDC成分が配列の中心にくるように処理することで、ゼロパディングが適切に行われます。
引数:
data(np.ndarray): 補間したい3次元の周期データ。形状は(Nx, Ny, Nz)である必要があります。要素のデータ型は実数または複素数に対応します。interp_factor(tuple): 各次元(x, y, z)の補間倍率を示す3つの整数(interp_x, interp_y, interp_z)のタプル。各要素は1以上の整数である必要があります。1を指定した場合、その次元は補間されません。
戻り値:
np.ndarray: 補間された3次元データ。元のデータ型が実数であれば実数データが返されます。この実装では最終的にnp.realを適用しているため、実数部のみが返されます。形状は(Nx * interp_x, Ny * interp_y, Nz * interp_z)となります。
例外:
ValueError: 入力データが3次元のNumPy配列でない場合、またはinterp_factorが適切な形式でない場合に発生します。
使用例
概要
このセクションでは、interpolate3d_fft.py スクリプトがどのように interpolate_3d_periodic_data_fft() 関数を使用し、結果を可視化するかを示します。
まず、3次元の周期的なサンプルデータを作成し、次に指定された補間倍率でデータを補間します。最後に、matplotlib を使用して、元のデータと補間後のデータを2Dスライスと3Dプロットの両方で視覚的に比較します。
実行方法
このプログラムは、Pythonインタープリタを使って直接実行できます。
python interpolate3d_fft.py
出力
プログラムを実行すると、以下の情報が標準出力に表示され、2つのグラフィックウィンドウが開きます。
標準出力:
元のデータの形状: (10, 10, 10) 補間後のデータの形状: (40, 40, 40)
グラフィック出力:
最初のウィンドウ (2Dスライス):
左側のサブプロットには、元のデータ
original_dataのX軸方向中央スライス (slice_idx_orig_x) がカラーマップviridisで表示されます。タイトルは「Original Data (X-slice atslice_idx_orig_x)」です。右側のサブプロットには、補間後のデータ
interpolated_dataのX軸方向中央スライス (slice_idx_interp_x) が同様にカラーマップviridisで表示されます。タイトルは「Interpolated Data (X-slice atslice_idx_interp_x)」です。両方のサブプロットにはカラーバーが付属し、Y軸とZ軸のラベルが表示されます。
2番目のウィンドウ (3Dプロット):
左側のサブプロットには、元のデータ
original_dataの全てのデータ点が3D散布図 (scatter) として表示されます。各点の色はデータ値に対応し、カラーマップviridisが使用されます。タイトルは「Original Data Points」です。右側のサブプロットには、補間後のデータ
interpolated_dataのZ軸方向中央スライス (z_slice_idx) が3D表面プロット (plot_surface) として表示されます。表面の色はデータ値に対応し、カラーマップviridisが使用されます。タイトルは「Interpolated Data (Z-slice atz_slice_idx)」です。両方のサブプロットにはカラーバーが付属し、X、Y、Z軸のラベルが表示されます。
これらの可視化により、FFTを用いた補間が元の離散データをより滑らかで高密度のデータに変換する様子を確認できます。