NumPy arange 但是步长加倍

3

我目前正在寻找一种类似于np.arange的方法,但具有加倍步长的选项。
我知道np.arange创建均匀间隔的数组,并不支持可变步长。 我想要的输出结果类似于np.array([0,1,3,7,15,31,...])
是否有任何内置的函数可以实现这个功能?
我必须经常使用它,因此希望避免使用for循环或类似的缓慢方法。

2个回答

6

尝试:

2 ** np.arange(0,10,1) - 1

0

尝试这个答案

Numpy的arange()函数直接是一个静态步进函数。我们可以稍微自定义一下,以获得所需的数组np.array([0, 1, 3, 7, 15, 31, ...])

n = 10                     #number of elements
2**np.arange(0, n, 1)-1    #range function

这也可以提供某些结果。这段代码比其他 for 循环 方法要简单得多。

比较结果

像这样使用 for 循环创建数组在处理上比其他方法更有效率。

import timeit

print(timeit.timeit(f'np.array([2**i-1 for i in range(10)])', setup='import numpy as np'))
# 3.5182215999811888

print(timeit.timeit(f'np.fromiter((2**i-1 for i in range(10)), int)', setup='import numpy as np'))
# 3.74799029994756

print(timeit.timeit(f'2 ** np.arange(0,10,1) - 1', setup='import numpy as np'))
# 4.791339100105688

希望你找到了最好的答案 :)


这取决于你的硬件。在一个 2 核 Colab 实例上,使用纯 numpy 的解决方案比将列表推导式转换要快大约 1.8 倍(使用更公正的 np.arange(10) 比较)。 - Michael Szczesny

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