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

How to find and truncate a list to the nearest power of 2 (in the most pythonic way)

我有一个名为 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]

这样就可以了;然而,它为 while 循环使用了一个虚拟整数 n,这不是很 "pythonic".

有人可以提供更 pythonic高效 的方法吗?

推理:

我截断的原因 data 是因为我想执行 FFT。您可以使用此技巧减少 FFT 计算时间,而对结果几乎没有影响。

FFT 的工作原理是将数据分成奇数集和偶数集,这样做的次数越多,计算速度就越快。因此,长度越能被 2 整除,可以进行更多的拆分,计算时间就越短。相反,列表长度是质数是最慢的。

我不打算引发关于 FFT 的 'zero padding' 与 'truncating' 数据的讨论,而是专注于为给定的找到最接近 2 的幂的最 pythonic 方法数.

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