2012-02-21 99 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