다음과 같은 다양한 인터페이스를 사용하여 2D FFT를 수행하는 매우 기본적인 예가 있습니다. pyfftw.FFTW
인터페이스는 가장 빠르고, 분명히FFT를 수행하는 가장 빠른 방법
numpy.fft.fft2: 1.878 secs.
pyfftw.interfaces.scipy_fftpack.fft2: 50.133 secs.
pyfftw.interfaces.numpy_fft.fft2: 52.136 secs.
pyfftw.FFTW: 0.331 secs.
하지만 (내가 잘못하고있는 무슨 확실하지 않다) 작동하지 않습니다
import time
import numpy
import pyfftw
import multiprocessing
a = numpy.random.rand(2364,2756).astype('complex128')
start = time.time()
b1 = numpy.fft.fft2(a)
end1 = time.time() - start
start = time.time()
b2 = pyfftw.interfaces.scipy_fftpack.fft2(a, threads=multiprocessing.cpu_count())
end2 = time.time() - start
pyfftw.forget_wisdom()
start = time.time()
b3 = pyfftw.interfaces.numpy_fft.fft2(a, threads=multiprocessing.cpu_count())
end3 = time.time() - start
pyfftw.forget_wisdom()
start = time.time()
b4 = numpy.zeros_like(a)
fft = pyfftw.FFTW(a, b4, axes=(0,1), flags=('FFTW_ESTIMATE',),planning_timelimit=1.0)
fft()
end4 = time.time() - start
print('numpy.fft.fft2: %.3f secs.' % end1)
print('pyfftw.interfaces.scipy_fftpack.fft2: %.3f secs.' % end2)
print('pyfftw.interfaces.numpy_fft.fft2: %.3f secs.' % end3)
print('pyfftw.FFTW: %.3f secs.' % end4)
이 다음과 같은 결과를 생성합니다.
pyfftw.interfaces.scipy_fftpack.fft2
과 pyfftw.interfaces.numpy_fft.fft2
은 상당한 시간이 걸리지 만, 그 시간은 대부분 처음 계획 단계에있는 것으로 결정했습니다. 필자의 경우, 하나의 FFT2와 하나의 IFFT2만이 (프로세스 당) 수행 될 것이므로 계획이 나를 죽이고있다. 지혜를 잊지 않고 두 번 실행하면 약 0.33 초 후에 실행됩니다 (그러나 내 경우에는 발생하지 않음).
따라서 질문은 입니다. pyfftw.FFTW
에서 데이터가 잘못되어 무엇이 잘못 되었습니까? - 또는 - 2. pyfftw.interfaces.scipy_fftpack.fft2
또는 pyfftw.interfaces.numpy_fft.fft2
에 대한 계획 수립 및 제한 시간을 어떻게 변경합니까?
http://hgomersall.github.io/pyFFTW/pyfftw/pyfftw.html에서 : "이 어레이의 내용은 계획 프로세스에 의해 파괴됩니다. 초기화. " – SleuthEye