【发布时间】:2014-01-16 11:52:42
【问题描述】:
在测试期间,我注意到一些奇怪的事情。
我正在对很多向量进行 FFT,有时 numpy FFT 函数似乎会崩溃。
我对此进行了简要调试,发现某些向量长度触发了该行为。
顺便说一句,我一直在运行一个脚本,令我惊讶的是,它并没有崩溃,只是花了一点时间。
有没有人知道发生了什么,以及如何应对。我已经看到了许多不同的 FFT 大小,下面只是一个例子。
import numpy as np
import time
a = np.zeros(166400)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
a = np.zeros(165039)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
a = np.zeros(165038)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
a = np.zeros(165036)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
a = np.zeros(165035)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
a = np.zeros(165034)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
a = np.zeros(165037)
start = time.time()
audio_fft = np.fft.fft(a,len(a))
print "it took %fs"%(time.time() -start)
print "done"
这个输出:
c:\Users\sol_sf\Desktop\math>fftTest.py
it took 0.029000s
it took 0.101000s
it took 0.176000s
it took 0.220000s
it took 0.671000s
it took 0.065000s
it took 369.132000s
done
c:\Users\sol_sf\Desktop\math>
【问题讨论】:
-
根据 len(a) 的因式分解,使用了许多不同的算法。如你所知,2 的幂是最快的,所以如果你能垫,那是最好的路线。 en.wikipedia.org/wiki/… 有更多信息。