2012-02-21 98 views
4

我想在numpy中创建一个包含数学系列值的数组,在本例中为前一个值的平方,给出一个单独的起始值,即a_0 = 2,a_1 = 4,a_3 = 16,.. 。如何使用numpy来有效地计算系列?

欲以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或其他工具来矢量化这个函数?还有什么其他方法可以在没有for循环的情况下有效计算一系列快速numpy函数时的值?

+0

也有关系:http://stackoverflow.com/questions/4407984/is-a-for-loop-necessary-if-elements-这是一个numpy向量是依赖于t – sdaau 2013-12-18 11:16:55

回答

6

在NumPy中没有通用的方法来引导递归序列定义。这种特殊的情况下,是比较容易编写,而没有for循环,但:

>>> 2 ** 2 ** numpy.arange(5) 
array([ 2,  4, 16, 256, 65536]) 
+0

谢谢。这不是我希望的答案,但现在我可以开始重写我的问题以避免递归定义。 – Alexander 2012-02-21 17:03:00