2016-12-31 12 views
0

我有一個名爲data的列表,我想截斷它,使它的長度是2的冪。當前的方法I使用如下:如何查找和截斷列表到最近的2次冪(以最pythonic的方式)

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的'零填充'與'截斷'數據進行討論,而是關注最具pythonic的方式來找出給定數字的2的最近冪。

+2

看看這個先前問的問題(http://stackoverflow.com/questions/3797575/find-largest-power-of-two-less-than-x-number)。 –

+0

是的就是這樣。很好找 –

回答