如何使用numpy有效地计算系列?

Ale*_*der 4 python optimization numpy

我想在numpy中创建一个包含数学系列值的数组,在本例中是前一个值的平方,给出一个起始值,即a_0 = 2,a_1 = 4,a_3 = 16,...

试图在numpy中使用矢量化我认为这可能有效:

import numpy as np
a = np.array([2,0,0,0,0])
a[1:] = a[0:-1]**2
Run Code Online (Sandbox Code Playgroud)

但结果是

array([2, 4, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)

我现在已经知道numpy会在内部为输出创建一个临时数组,并最终复制这个数组,这就是原始数组中零值失败的原因.有没有办法使用numpy,numexpr或其他工具来矢量化这个函数?当快速numpy函数可用而不需要for循环时,有哪些其他方法可以有效地计算一系列的值?

Sve*_*ach 6

在NumPy中没有通用的方法来矢量化递归序列定义.这种特殊情况很容易在没有for循环的情况下编写:

>>> 2 ** 2 ** numpy.arange(5)
array([    2,     4,    16,   256, 65536])
Run Code Online (Sandbox Code Playgroud)