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通话的同时()。
在此先感谢您的支持。
答
你可以看看基于GPU的代码(如果你有合适的硬件):
http://pypi.python.org/pypi/pyfft
http://pypi.python.org/pypi/scikits.cuda
它们是基于PyCuda UND PyOpenCL。我没有太多的经验,所以你必须做一点挖掘,找到最适合你的东西。
所以Matlab的调用和PyFFTW一样快? Matlab也使用FFTW,但它们使用英特尔MKL加速器进行编译。如果您没有英特尔的C编译器或MKL库,您的PyFFTW可能会比Matlab的FFT慢。 –
“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用户不会因为创建计划和处理智慧而烦恼...... –
您能否更新问题并包含Python和Matlab的输出时间? –