3

python と matlab でさまざまな方法を使用して FFT の速度を比較しましたが、結果は少し奇妙に見え、正しく実行できたかどうかわかりませんでした。Python のコードは次のとおりです。

from scipy import fft
import pyfftw
import numpy as np
from timeit import Timer

a = pyfftw.empty_aligned((256, 256), dtype='complex128')

# fft using scipy
t = Timer(lambda: fft.fft2(a))
print('Time with scipy.fft: %1.3f seconds' % t.timeit(number=1000))

# fft using pyfftw improved scipy
t = Timer(lambda: pyfftw.interfaces.scipy_fft.fft2(a))
pyfftw.interfaces.cache.enable()
print('Time with pyfftw improved scipy: %1.3f seconds' % t.timeit(number=1000))

# fft using pyfftw
a = pyfftw.empty_aligned((256, 256), dtype='complex128')
b = pyfftw.empty_aligned((256, 256), dtype='complex128')
fft_object = pyfftw.FFTW(a, b)
ar = np.random.randn(256,256)
ai = np.random.randn(256,256)
a[:] = ar + 1j*ai
t = Timer(lambda: fft_object())
print('Time with pyfftw: %1.3f seconds' % t.timeit(number=1000))

出力で:

Time with scipy.fft: 1.416 seconds
Time with pyfftw improved scipy: 1.305 seconds
Time with pyfftw: 0.122 seconds

matlab のコードは次のとおりです。

a = zeros(256,256);
a = a + i*a;
tic;
for n = 1:1000
fft2(a);
end
toc;

時間コストは 0.721065 秒です。pyfftw と scipy の間、および pyfftw と matlab の間では、時間コストが大きく異なります。比較を正しく行ったのか、なぜ違いが明らかなのか?

4

0 に答える 0