2013-12-11 2 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을 작성하여 i의 값이 pi-1의 결과가되도록 할 수 있습니까?

이 나는 ​​시도했다 :

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

그러나,이 항목 할당 오류를 지원하지 않는 numpy.float64가 발생합니다.

이 어레이를 제작하려면 어떻게해야합니까? 합계로 prodsum으로 바꿀 수 있습니까?

답변

5

당신이 원하는 NumPy와 기능 cumprodcumsum

from numpy import cumprod, cumsum 
# your code here 
q = cumprod(p) 
r = cumsum(p) 

문서

+1

합계가 'cumsum'입니다. – Bitwise

+0

그래, 질문에 표시되지 않았습니다. – YXD

+0

고마워요! 'numpy partial products'를 검색했지만 반환되지 않았습니다! –

2

cumprod 좋은 바보이지만 이 방법을 사용하는 경우 오류가 발생한 이유를 이해하는 것이 좋습니다.

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은 배열이 아니기 때문에 q[i+1]이 작동하지 않습니다.

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

이 반복이 작동합니다. 이제 q은 충분히 큰 배열이고 i은 유효한 인덱스 인 정수입니다. i을 사용하는 곳에서는 i+1 또는 i-1을 조정할 수 있습니다.