30

Pythonで最速のFFT実装は何ですか?

numpy.fft と scipy.fftpack はどちらも FFTW ではなく、fftpack に基づいているようです。fftpack は FFTW と同じくらい高速ですか? マルチスレッド FFT や分散型 (MPI) FFT の使用はどうでしょうか?

4

6 に答える 6

23

Cython や外部ライブラリへのアクセスを可能にする他の同様のツールを使用して、テストしたい FFT 実装を確実にラップできます。

GPU ベース

FFT の実装をテストする場合は、GPU ベースのコードを検討することもできます (適切なハードウェアにアクセスできる場合)。いくつかあります: reikna.fftscikits.cuda

CPU ベース

CPU ベースの python FFTW ラッパーpyFFTWもあります。

( pyFFTW3もありますが、 pyFFTWほど整備が進んでおらず、Python3では動きません。( source ))

私はこれらの経験がありません。速度が重要な場合、特定のアプリケーションのさまざまなコードを掘り下げてベンチマークするのは、おそらくあなたの責任になるでしょう。

于 2011-06-16T00:53:34.007 に答える
3

pyFFTW3 パッケージは、pyFFTW ライブラリと比較して、少なくとも実装面では劣っています。どちらもFFTW3ライブラリをラップしているので、速度は同じはずです。

https://pypi.python.org/pypi/pyFFTW

于 2013-10-18T12:14:11.670 に答える
2

私が働いている場所では、特定の問題に対してFFTWをセットアップして呼び出すこのFortranライブラリをコンパイルした研究者がいます。この Fortran ライブラリ (いくつかのサブルーチンを含むモジュール) は、Python プログラムからの入力データ (2D リスト) を想定しています。

私がしたことは、Fortran ライブラリをラップする Python 用の小さな C 拡張を作成することでした。そこでは、基本的に "init" を呼び出して FFTW プランナーをセットアップし、別の関数を呼び出して 2D リスト (配列) と "compute" 関数をフィードします。

C 拡張機能を作成するのは簡単な作業であり、その特定の作業に関する優れたチュートリアルがたくさんあります。

このアプローチの良いところは、速度が速いことです.. かなりの速度です。唯一の欠点は、Python リストを反復処理し、すべての Python データをメモリ バッファーに抽出する必要がある C 拡張にあります。

于 2011-06-16T07:15:57.627 に答える
1

FFTW3 は、適切にラップされた最速の実装のようです。最初の回答の PyFFTW バインディングが機能します。実行時間を比較するコードは次のとおりです: test_ffts.py

于 2011-12-10T18:34:03.323 に答える
1

FFTW サイトでは、fftpack が FFTWの約 1/3 の速さで実行されていることが示されていますが、これは機械的に Fortran から C に変換された後、C コンパイルが行われるため、numpy/scipy がより直接的な Fortran コンパイルを使用するかどうかはわかりません。パフォーマンスが重要な場合は、FFTW を DLL/共有ライブラリにコンパイルし、ctypes を使用してアクセスするか、カスタム C 拡張機能を構築することを検討してください。

于 2011-06-15T23:41:28.983 に答える