Skip to main content
 首页 » 编程设计

python之为什么基于 FFTW 的 pyfftw 比 numpy 的 fft() 慢

2025年05月04日13langtianya

我运行测试 sqript。它使用基于FFTW的numpy.fft.fft()、anfft.fft()和基于FFTW的pyfftw.interfaces.numpy_fft.fft()。

这是我的测试脚本的来源:

import numpy as np 
import anfft 
import pyfftw 
import time 
 
a = pyfftw.n_byte_align_empty(128, 16, 'complex128') 
a[:] = np.random.randn(128) + 1j*np.random.randn(128) 
 
time0 = time.clock() 
res1 = np.fft.fft(a) 
time1 = time.clock() 
res2 = anfft.fft(a) 
time2 = time.clock() 
res3 = pyfftw.interfaces.numpy_fft.fft(a,threads=50) 
time3 = time.clock() 
 
print 'Time numpy: %s' % (time1 - time0) 
print 'Time anfft: %s' % (time2 - time1) 
print 'Time pyfftw: %s' % (time3 - time2) 

我得到了这些结果:

Time numpy: 0.00154248116307 
Time anfft: 0.0139805208195 
Time pyfftw: 0.137729374893 

anfft 库在大数据上产生更快的 fft,但是 pyfftw 呢?为什么这么慢?

请您参考如下方法:

在这种情况下,产生比 CPU 内核更多的线程不会提高性能,而且可能会由于切换线程的开销而使程序变慢。 50 个线程完全是矫枉过正。

尝试使用一个线程进行基准测试。