我正在尝试在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
是i-1
以前的p
值的乘积?
我试过了:
for i in p:
q[i+1] = prod(p[0:i-1])
但是,这会抛出numpy.float64不支持项目分配错误。
我将如何构建此阵列?对于总和,我可以将prod
替换为sum
吗?
答案 0 :(得分:6)
您想要NumPy函数cumprod
和cumsum
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个问题。 i
是p
的项目,而不是索引。事实上它可能是一个浮动。 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
是一个整数,一个有效的索引。使用i
,i+1
或i-1
的地方是您可以调整的地方。