後者は前者の同義語ですか、それともFFTの2つの異なる実装ですか?どちらの方がよいですか?
SciPyの機能:
さらに、SciPyは、たとえばscipy.fftpack.helper.fftfreqおよびnumpy.fft.helper.fftfreq実際に同じコードを実行しています。
ただし、SciPyには独自の多くの機能の実装があります。ソースには、元のNumPyバージョンと新しいSciPyバージョンを比較するパフォーマンスベンチマークがあります。私の古風なラップトップは次のようなものを示しています:
Fast Fourier Transform
=================================================
| real input | complex input
-------------------------------------------------
size | scipy | numpy | scipy | numpy
-------------------------------------------------
100 | 0.07 | 0.06 | 0.06 | 0.07 (secs for 7000 calls)
1000 | 0.06 | 0.09 | 0.09 | 0.09 (secs for 2000 calls)
256 | 0.11 | 0.11 | 0.12 | 0.11 (secs for 10000 calls)
512 | 0.16 | 0.21 | 0.20 | 0.21 (secs for 10000 calls)
1024 | 0.03 | 0.04 | 0.04 | 0.04 (secs for 1000 calls)
2048 | 0.05 | 0.09 | 0.08 | 0.08 (secs for 1000 calls)
4096 | 0.05 | 0.08 | 0.07 | 0.09 (secs for 500 calls)
8192 | 0.10 | 0.20 | 0.19 | 0.21 (secs for 500 calls)
配列のサイズが大きくなると、SciPyは非常に高速に実行されるように見えますが、これらは単なる例であり、特定のプロジェクトで両方を試す価値があります。
ソースコードをチェックアウトする価値があります http://www.scipy.org/Download#head-312ad78cdf85a9ca6fa17a266752069d23f785d1 はい、これらの.fファイルは本当にFortranです! :-D
Numpyの2D fftはscipyの2d fftよりも大幅に高速でしたが、FFTWは両方よりも高速でした(PyFFTWバインディングを使用)。パフォーマンステストはこちら:code.google.com/p/agpy/source/browse/trunk/tests/test_ffts.py
結果(n
x n
配列の場合):
n sp np fftw
8: 0.010189 0.005077 0.028378
16: 0.010795 0.008069 0.028716
32: 0.014351 0.008566 0.031076
64: 0.028796 0.019308 0.036931
128: 0.093085 0.074986 0.088365
256: 0.459137 0.317680 0.170934
512: 2.652487 1.811646 0.571402
1024: 10.722885 7.796856 3.509452
それぞれのgithubリポジトリを見ると、scipyは単にnumpyのバージョンをインポートして名前を変更しているだけではありません(ただし、いくつかの機能を借用しています)。ドキュメントは直接比較を行っていないため、実装の違いを識別したい場合は、コードを詳しく調べる必要があります。