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

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

解答

SciPy 做得更多:

  • http://docs.scipy.org/doc/numpy/reference/routines.fft.html

  • http://docs.scipy.org/doc/scipy/reference/fftpack.html#

此外,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)

随着数组大小的增加,SciPy 的运行速度似乎确实要快得多,尽管这些只是人为的示例,对于您的特定项目来说,两者都值得试验。

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

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐