2017-04-14 1 views
1

J'essaie de comparer Pyfftw (en Python 3.6) avec matlab r2017a fft.Pyfftw plus lent que 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)) 

alors que si j'utilise Matlab:

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

cette demande juste le temps pour le calcul de l'algorithme de fft, qui est le approximativement en même temps de l'appel du python sur fft_object().

Merci d'avance pour votre soutien.

+0

L'appel Matlab est donc aussi rapide que PyFFTW? Matlab utilise aussi FFTW, mais ils le compilent avec les accélérations Intel MKL. Si vous ne disposez pas du compilateur C ou de la bibliothèque MKL d'Intel, votre PyFFTW sera probablement plus lent que la FFT de Matlab. –

+2

L'étape 'pyfftw.builders.fft' prend beaucoup de temps car, par défaut, FFTW trouve un schéma FFT optimisé par mesure réelle: voir https://hgomersall.github.io/pyFFTW/pyfftw/builders/builders.html#additional -arguments en particulier le drapeau 'planner_effort'. Vous pouvez utiliser 'export_wisdom' pour exporter cette mesure dans un fichier, et' import_wisdom' pour le charger, ce qui vous fait gagner beaucoup de temps. Matlab dit à FFTW d'estimer rapidement le schéma FFT à utiliser, car les utilisateurs de Matlab ne peuvent pas être dérangés pour créer un plan et gérer la sagesse ... –

+1

Pouvez-vous mettre à jour la question et inclure les temps de sortie de Python et Matlab? –

Répondre