我想创建一个如下所示的数组:
# 0 | 4 | 8 | 16 | 32
其中,除第一个元素之外的每个元素都是前一个元素的两倍。 我可以通过迭代创建这个更小的等等。
然而,由于Python提供了许多单线函数,我想知道是否有一个允许我这样做。
答案 0 :(得分:6)
可能是一行,但这更明确:
x = np.multiply.accumulate( np.ones( 10 )*2)
x[0] = 0
OR
x = 2**np.arange(1,10)
x[0] = 0
答案 1 :(得分:2)
您可以使用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"函数名称清楚地表明我选择了一个带有log(而不是线性)间距的范围。
答案 2 :(得分: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])