ドキュメントによると、numpy の FFT はFFTPACKに基づいています。
FFTPACK のドキュメントには、次の記述があります。
サブルーチン rffti(n,wsave)
サブルーチン rffti は、rfftf と rfftb の両方で使用される配列 wsave を初期化します。n の素因数分解と三角関数の表が計算され、wsave に保存されます。
標準の Cooley-Tukey アルゴリズムは「時間デシメーションを使用した基数 2」であり、サイズの FFT の計算を2*n
サイズ n の 2 つの FFT とサイズ 2 の n FFT に再帰的に削減します。同じものの一般的な因数分解バージョンがあります。サイズm*n
の FFT をサイズ m の n FFT とサイズ n の m FFT に変換するアルゴリズム。FFTPACK の準備ルーチンが入力サイズの素因数分解を計算するという事実は、これが彼らがしていることを示しているようです。したがって、素数の要素を使用しない限り、または要素数の素因数が非常に大きい場合を除き、かなり高速化されるはずです。
数年前、私は Cooley-Tukey のアルゴリズムの基数 2バージョンと一般因数分解バージョンの両方についてブログを書きました。それらを読むと、NumPy の内部で何が起こっているように見えるかを理解するのに役立つかもしれません。そこから取得した次の図は、CT FFT を示しています。
