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

Cha*_*net 53 python numpy fft scipy

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

jon*_*d3k 34

SciPy做得更多:

此外,SciPy通过其自己的界面导出一些NumPy功能,例如,如果执行scipy.fftpack.helper.fftfreqnumpy.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)
Run Code Online (Sandbox Code Playgroud)

看起来SciPy的运行速度明显快,因为阵列的大小增加了,尽管这些只是人为的例子,值得为你的特定项目进行试验.

值得查看源代码http://www.scipy.org/Download#head-312ad78cdf85a9ca6fa17a266752069d23f785d1.是的那些.f文件真的是Fortran!:-D

  • 知道为什么他们选择维护两种不同的实现吗? (2认同)
  • scipy 的 fft 检查您的数据类型是否真实,如果是,则使用效率翻倍的 rfft。numpy 的 fft 没有。 (2认同)
  • scipy以非常无用的格式返回数据 - 在第一个元素之后交替实部和虚部.一旦你将它分开,投射到复杂,完成你的计算,然后把它全部抛回,你会失去很多(但不是全部)加速.基本上它不是一个公平的比较 - numpy的时间包括使输出可用,而不仅仅是做fft. (2认同)
  • 另外,请查看http://hgomersall.github.io/pyFFTW/pyfftw/interfaces/interfaces.html它是fftw的一个不错的包装器,可以作为numpy.fft或scipy.fftpack的替代品. (2认同)

kef*_*ich 16

我发现numpy的2D fft明显快于scipy,但是FFTW比两者都快(使用PyFFTW绑定).性能测试如下:code.google.com/p/agpy/source/browse/trunk/tests/test_ffts.py

结果(对于nx 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
Run Code Online (Sandbox Code Playgroud)