相关文章推荐
面冷心慈的枕头  ·  Digital Micrograph ...·  4 天前    · 
知识渊博的斑马  ·  playframework - Scala ...·  1 年前    · 
冲动的皮带  ·  eggjs 获取请求ip-掘金·  1 年前    · 
沉稳的椅子  ·  Django Admin ...·  2 年前    · 

Python中最快的FFT实现是什么?

似乎numpy.fft和scipy.fftpack都是基于fftpack,而不是FFTW。fftpack是否和FFTW一样快?使用多线程FFT,或者使用分布式(MPI)FFT呢?

python
numpy
scipy
fft
fftw
Charles Brunet
Charles Brunet
发布于 2011-06-16
6 个回答
JoshAdel
JoshAdel
发布于 2011-12-11
已采纳
0 人赞同

你当然可以用Cython或其他允许你访问外部库的类似工具来包装你想测试的任何FFT实现。

GPU-based

如果你要测试FFT的实现,你也可以看看基于GPU的代码(如果你能获得适当的硬件)。有几种。 计算.fft , scikits.cuda .

CPU-based

还有一个基于CPU的python FFTW包装器 pyFFTW .

(There is pyFFTW3 也是如此,但它不像 pyFFTW 那样被积极维护,而且它不能与 Python3 一起工作。 source ))

我对这些都没有经验。如果速度对你来说很重要的话,你可能需要做一些调查,并为你的特定应用确定不同代码的基准。

这个答案有点陈旧,但在谷歌上排名靠前。 My FFTW 封装器的维护比 pyFFTW3 更加积极,而且我认为它们提供的内容也更加完整。
Finn Årup Nielsen
Finn Årup Nielsen
发布于 2011-12-11
0 人赞同

对于一个详细的测试,在 https://gist.github.com/fnielsen/99b981b9da34ae3d5035 我发现,与我通过 pyfftw.interfaces.scipy_fftpack 对pyfftw的简单应用相比,scipy.ftpack的表现很好,除了长度对应于素数的数据。

第一次调用 pyfftw.interfaces.scipy_fftpack.fft 时,似乎有一些设置成本。第二次会更快。Numpy 和 scipy 的 fftpack 在我尝试的数据大小上表现得很糟糕。在这种情况下,CZT更快。几个月前,Scipy的Github上出现了一个关于这个问题的问题,见 https://github.com/scipy/scipy/issues/4288

20000 prime=False
  padded_fft : 0.003116
   numpy_fft : 0.003502
   scipy_fft : 0.001538
         czt : 0.035041
    fftw_fft : 0.004007
------------------------------------------------------------
20011 prime=True
  padded_fft : 0.001070
   numpy_fft : 1.263672
   scipy_fft : 0.875641
         czt : 0.033139
    fftw_fft : 0.009980
------------------------------------------------------------
21803 prime=True
  padded_fft : 0.001076
   numpy_fft : 1.510341
   scipy_fft : 1.043572
         czt : 0.035129
    fftw_fft : 0.011463
------------------------------------------------------------
21804 prime=False
  padded_fft : 0.001108
   numpy_fft : 0.004672
   scipy_fft : 0.001620
         czt : 0.033854
    fftw_fft : 0.005075
------------------------------------------------------------
21997 prime=True
  padded_fft : 0.000940
   numpy_fft : 1.534876
   scipy_fft : 1.058001
         czt : 0.034321
    fftw_fft : 0.012839
------------------------------------------------------------
32768 prime=False
  padded_fft : 0.001222
   numpy_fft : 0.002410
   scipy_fft : 0.000925
         czt : 0.039275
    fftw_fft : 0.005714
------------------------------------------------------------
    
ABDreverhaven
ABDreverhaven
发布于 2011-12-11
0 人赞同

pyFFTW3包与pyFFTW库相比要差一些,至少在实现上是如此。既然它们都包裹了FFTW3库,我想速度应该是一样的。

https://pypi.python.org/pypi/pyFFTW

Asbjørn A. Fellinghaug
Asbjørn A. Fellinghaug
发布于 2011-12-11
0 人赞同

在我工作的地方,一些研究人员编译了这个Fortran库,为一个特定的问题设置和调用FFTW。这个Fortran库(带有一些子程序的模块)希望从我的Python程序中获得一些输入数据(2D列表)。

我所做的是为Python创建了一个小的C语言扩展,包装了Fortran库,在那里我基本上调用 "init "来设置FFTW计划器,还有一个函数来输入我的2D列表(数组),以及一个 "计算 "函数。

创建C-extensions是一项小任务,而且有很多关于这一特定任务的好的教程。