如何查找列表并将其截断为最接近的 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))
我有一个名为 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))