2014-10-07 110 views
3

我想創建一個數組像下面numpy的數組:創建具有不同的步驟

# 0 | 4 | 8 | 16 | 32 

其中,除了第一每個元素,是前一個的兩倍。 我可以通過迭代等來創建這個更小的對象。

但是,由於Python提供了很多單線程功能,我想知道是否有一個允許我這樣做。

回答

6

可能是一條線,但是這是比較明確的:

x = np.multiply.accumulate(np.ones(10)*2) 
x[0] = 0 

OR

x = 2**np.arange(1,10) 
x[0] = 0 
+0

我喜歡使用'arange'和指數,明確發生了什麼。 – lmjohns3 2014-10-07 15:35:38

+0

或者更緊湊:'np.cumprod(np.full((5,),2))' – hpaulj 2014-10-07 20:07:23

1
import numpy as np 

你可以使用列表理解(在這種情況下2^n)來評估你的冪函數,然後從中生成一個numpy.array

>>> np.array([0] + [2**i for i in range(2, 10)]) 
array([ 0, 4, 8, 16, 32, 64, 128, 256, 512]) 
+1

稍作解釋會很好! – gsamaras 2014-10-07 15:35:38

1

您可以使用numpy.logspace獲取對數間隔範圍。使用base=N關鍵字參數設定指數的基礎:我喜歡這種方法

In [27]: np.logspace(0, 10, 11, base=2).astype(int) 
Out[27]: array([ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]) 

因爲「LOGSPACE」函數的名稱清楚地表明,我將與日誌範圍(而不是線性)間距。