使用不同步长创建numpy数组

3
我想创建一个类似以下的数组:
# 0 | 4 | 8 | 16 | 32

其中,除第一个元素外的每个元素都是前一个元素的两倍。我可以通过迭代创建更小的版本等等。

然而,由于Python提供了许多单行函数,我想知道是否有一种函数可以实现这个功能。

3个回答

6

虽然可以写成一行,但这样更加明确:

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

或者

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

我喜欢使用arange和指数运算,这使得代码的意图更加清晰。 - lmjohns3
更简洁地说:np.cumprod(np.full((5,),2)) - hpaulj

2
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

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”函数名称清楚地表明我正在使用对数(而不是线性)间隔的范围。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接