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

标签 python fft

我运行测试 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 个线程完全是矫枉过正。

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

关于python - 为什么基于 FFTW 的 pyfftw 比 numpy 的 fft() 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819431/

相关文章:

python - pip 需求文件中的平台独立性

Python NumPy - FFT 和逆 FFT?

带有urllib和cookiejar的网页上的python 3登录表单

python : generate an array of time and append it to the dataframe

python - 元组索引、组合切片和索引

python - 如何减少 python 中的多处理时间

iphone - 基于傅里叶变换创建 iPhone 音乐可视化器

python - 将图像转换为 Python 中的二维坐标数组以实现两点相关

fft - 从复数 FFT 到有限场 FFT 的转换

javascript - 为什么 getFloatFrequencyData 返回的值为负数?