Pyfftw比matlab fft

问题描述:

我试图比较Pyfftw(在Python 3.6中)与matlab r2017a fft。Pyfftw比matlab fft

import time 
import numpy 
import pyfftw 
import multiprocessing 


nthread = multiprocessing.cpu_count() 
print(nthread) 
n=2**20 
a = pyfftw.empty_aligned(n, dtype='complex128') 
print("fft_object = pyfftw.builders.fft(a)") 
fft_object = pyfftw.builders.fft(a) #this instruction spend much time 
print("generate numbers") 
a[:]= 5*numpy.random.rand(n) 
print(a) 
print("start fft") 
start = time.clock() 
y=fft_object() 
end4 = time.clock() - start 
print(end, time:") 
print(end4) 
print("result") 
print(y) 
print(len(y)) 

而如果我使用MATLAB:

x=5*rand(2^20,1);tic;fft(x);toc 

这一要求只是时间FFT算法的计算,即近似蟒蛇对fft_object通话的同时()。

在此先感谢您的支持。

+0

所以Matlab的调用和PyFFTW一样快? Matlab也使用FFTW,但它们使用英特尔MKL加速器进行编译。如果您没有英特尔的C编译器或MKL库,您的PyFFTW可能会比Matlab的FFT慢。 –

+2

“pyfftw.builders.fft”步骤需要很长时间,因为默认情况下,FFTW正在通过实际测量发现优化的FFT方案:请参阅https://hgomersall.github.io/pyFFTW/pyfftw/builders/builders.html#additional特别是'planner_effort'标志。您可以使用'export_wisdom'将这个度量导出到一个文件中,并使用'import_wisdom'来加载它,这为您节省了很多时间。 Matlab告诉FFTW快速'估计'使用哪种FFT方案,因为Matlab用户不会因为创建计划和处理智慧而烦恼...... –

+1

您能否更新问题并包含Python和Matlab的输出时间? –

你可以看看基于GPU的代码(如果你有合适的硬件):

http://pypi.python.org/pypi/pyfft

http://pypi.python.org/pypi/scikits.cuda

它们是基于PyCuda UND PyOpenCL。我没有太多的经验,所以你必须做一点挖掘,找到最适合你的东西。