numpy.fft和scipy.fftpack有什么区别?

时间:2011-06-15 19:28:04

标签: python numpy scipy fft

后者只是前者的同义词,还是两种不同的FFT实现?哪一个更好?

3 个答案:

答案 0 :(得分:33)

SciPy做得更多:

此外,SciPy通过自己的界面导出一些NumPy功能,例如,如果您执行 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

答案 1 :(得分:16)

我发现numpy的2D fft明显快于scipy,但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

答案 2 :(得分:3)

查看每个的github存储库,scipy不只是导入numpy的版本并重命名它(虽然它确实借用了一些功能)。如果你想要识别实现中的差异,你将不得不深入研究代码,因为文档没有直接比较。

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

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