如何查找列表并将其截断为最接近的2的幂(以最pythonic方式)

时间:2016-12-31 22:14:21

标签: python numpy scipy fft

我有一个名为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的幂。

1 个答案:

答案 0 :(得分:1)

int (math.log (len (data), 2))