我想创建一个类似以下的数组:
# 0 | 4 | 8 | 16 | 32
其中,除第一个元素外的每个元素都是前一个元素的两倍。我可以通过迭代创建更小的版本等等。
然而,由于Python提供了许多单行函数,我想知道是否有一种函数可以实现这个功能。
虽然可以写成一行,但这样更加明确:
x = np.multiply.accumulate( np.ones( 10 )*2)
x[0] = 0
或者
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])
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])
arange
和指数运算,这使得代码的意图更加清晰。 - lmjohns3np.cumprod(np.full((5,),2))
- hpaulj