1

フォワードr2c変換中に保持される入力ベクトルをpyFFTW(FFTWのラッパー)に強制する可能性があるかどうかを知りたいです。

少なくとも元の FFTWでは、FFTW_PRESERVE_INPUTがデフォルトのオプションのようです (こちらのアルゴリズム制限フラグを参照してください: http://www.fftw.org/doc/Planner-Flags.html ) 。

pyFFTW のFFTW.__call__()を使用すると、いくつかのフラグを渡すことができますが、「FFTW_DESTROY_INPUT」のみがここにリストされています: http://hgomersall.github.io/pyFFTW/pyfftw/pyfftw.html#pyfftw.FFTW

ソース コードのファイルbuilders/builders.pyには、少し恐ろしいステートメント (166 行目) があるため、おそらくドキュメントの誤りだけではありません。

overwrite_input: 変換中に入力配列を上書きできるかどうか。

さらに、関数_Xfftnの定義のファイルbuilders/_utils.pyのコードでは、destory フラグのみが存在します。 if overwrite_input: flags.append('FFTW_DESTROY_INPUT')

究極の質問は、FFTW_PRESERVE_INPUT を pyFFTW で渡すことができないことを知っている場合、元の FFTW ではこのフラグ FFTW_PRESERVE_INPUT がデフォルトであるという事実に少なくとも依存できますか? 上記のコメントを思い出してください

$ rpm -q fftw fftw-3.3.4-6.fc23.x86_64

>>> pyfftw.__version__ '0.10.1

4

1 に答える 1

1

はい、明示的に要求されない限り、すべてのデフォルトが使用されます。これは、要求しない限りDESTROY_INPUTPRESERVE_INPUT暗黙的であることを意味します。ただし、多次元の c2r 変換がある場合を除きSchemesます。リンク先のドキュメントのセクション、およびリンク先の FFTW ドキュメント)。

入力が破棄されていて、それ自体が明示的に要求されていないか、上記の変換のいずれでもない場合を見つけた場合、これはバグであり、報告する必要があります。

コードは、interfaces必要に応じて変換が確実に保持されるように、さまざまなコピーを作成します。

私の記憶では、計画段階では配列の保護についてはかなり緩いです。配列を保護する最も簡単な方法は、builders明示的に別段の指示がない限り、常に元の配列を保存してコピーして戻すインターフェイスを使用することです。

于 2016-05-31T08:50:24.960 に答える