numpy中的部分金额和产品

时间:2013-12-11 16:27:35

标签: python 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不支持项目分配错误。

我将如何构建此阵列?对于总和,我可以将prod替换为sum吗?

2 个答案:

答案 0 :(得分:6)

您想要NumPy函数cumprodcumsum

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

文档

答案 1 :(得分: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[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的地方是您可以调整的地方。