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.
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. –
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 ... –
Pouvez-vous mettre à jour la question et inclure les temps de sortie de Python et Matlab? –