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”函数的名称清楚地表明,我将与日志范围(而不是线性)间距。