web-dev-qa-db-ja.com

numpy.fftとscipy.fftpackの違いは何ですか?

後者は前者の同義語ですか、それともFFTの2つの異なる実装ですか?どちらの方がよいですか?

50
Charles Brunet

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

34
jond3k

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
16
keflavich

それぞれのgithubリポジトリを見ると、scipyは単にnumpyのバージョンをインポートして名前を変更しているだけではありません(ただし、いくつかの機能を借用しています)。ドキュメントは直接比較を行っていないため、実装の違いを識別したい場合は、コードを詳しく調べる必要があります。

https://github.com/numpy/numpy/tree/master/numpy/fft

https://github.com/scipy/scipy/tree/master/scipy/fftpack

3
JoshAdel