我有一个名为data
的列表,我想截断它,以便它的长度为2的幂。我使用的当前方法如下:
n = 1 # dummy variable
while len(data)/(2**n) > 1:
n += 1
nearest_n = n - 1
data_trunc = data[0:2**nearest_n]
这就是工作;但是,它为n
循环使用了一个虚拟整数while
,它不是非常" pythonic"。
有人可以提供更强大的 pythonic 或高效方法吗?
推理:
我截断data
的原因是因为我想执行FFT。您可以使用此技巧减少FFT计算时间,对结果几乎没有影响。
FFT通过将数据分解为奇数和偶数集来工作,并且执行此操作的次数越多,计算得越快。因此,长度越可分2,分割越多,计算时间越短。相反,列表素数的长度是最慢的。
我不打算引发关于“零填充”的讨论。与'截断'用于FFT的数据,而是专注于以最pythonic方式找到给定数字的最接近2的幂。
答案 0 :(得分:1)
int (math.log (len (data), 2))