2013-12-11 33 views
1

我想建立一個numpy另一個數組的條目的部分產品數組。到目前爲止,我有:部分款項和產品在numpy

from numpy.random import dirichlet 
from numpy import ones, prod 

alpha = ones(100) 
p = dirichlet(alpha) 

我知道我可以通過切片我的數組部分產品。例如:

q = prod(p[0:10]) 

返回p前10項的乘積。

我該如何構建陣列q以便條目ii-1以前的值p的乘積?

我已經試過:

for i in p: 
    q[i+1] = prod(p[0:i-1]) 

然而,這將引發numpy.float64不支持的項目分配錯誤。

我將如何去建立這個數組?對於總和,我可以用sum代替prod嗎?

回答

2

雖然cumprod是一個很好的SIMP這樣做的方式,這將是很好理解爲什麼你有一個錯誤。

q = prod(p[0:10]) # q is now a float 
for i in p: 
    q[i+1] = prod(p[0:i-1]) 

迭代有2個問題。 ip的一項,不是索引。事實上,它可能是一個浮動。 q[i+1]不起作用,因爲q是一個浮點數,而不是一個數組。

q=np.zeros(p.size+1) 
for i in range(p.size): 
    q[i+1]=np.prod(p[:i]) 

此迭代工作。現在q是一個足夠大的數組,並且i是一個整數,一個有效的索引。它在哪裏使用ii+1i-1是你可以調整的東西。