我想在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
但结果是
array([2, 4, 0, 0, 0])
我现在已经知道numpy会在内部为输出创建一个临时数组,并在最后复制这个数组,这就是原始数组中零值失败的原因。 有没有办法使用numpy,numexpr或其他工具来矢量化这个函数?当快速numpy函数可用而没有进行for循环时,有哪些其他方法可以有效地计算一系列的值?
答案 0 :(得分:6)
在NumPy中没有通用的方法来矢量化递归序列定义。这种特殊情况很容易在没有for循环的情况下编写:
>>> 2 ** 2 ** numpy.arange(5)
array([ 2, 4, 16, 256, 65536])