我想创建一个数组像下面numpy的数组:创建具有不同的步骤
# 0 | 4 | 8 | 16 | 32
其中,除了第一每个元素,是前一个的两倍。 我可以通过迭代等来创建这个更小的对象。
但是,由于Python提供了很多单线程功能,我想知道是否有一个允许我这样做。
我想创建一个数组像下面numpy的数组:创建具有不同的步骤
# 0 | 4 | 8 | 16 | 32
其中,除了第一每个元素,是前一个的两倍。 我可以通过迭代等来创建这个更小的对象。
但是,由于Python提供了很多单线程功能,我想知道是否有一个允许我这样做。
可能是一条线,但是这是比较明确的:
x = np.multiply.accumulate(np.ones(10)*2)
x[0] = 0
OR
x = 2**np.arange(1,10)
x[0] = 0
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])
稍作解释会很好! – gsamaras 2014-10-07 15:35:38
您可以使用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”函数的名称清楚地表明,我将与日志范围(而不是线性)间距。
我喜欢使用'arange'和指数,明确发生了什么。 – lmjohns3 2014-10-07 15:35:38
或者更紧凑:'np.cumprod(np.full((5,),2))' – hpaulj 2014-10-07 20:07:23