0

我正在尝试对具有类 int 值的字典切片的值求和。

这是我的代码:

from scipy.stats import poisson

inventories = 4 # states
mu = 1 # value for lambda
prob = []
for i in range(inventories):
     prob.append(poisson.pmf(i, mu))

Transitions = {}
for i in range(inventories):
    for j in range(inventories-1,-1,-1):
        if i - j < 0:
            Transitions[0,i,j] = 0
        elif j <> 0:
            Transitions[0,i,j] = prob[i-j]
        elif j == 0:
            Transitions[0,i,j] = 1

如果你运行它,我试图让最后一行代码对每个 i 的所有 j 求和。我是一名 MATLAB 编码员,所以我习惯了矩阵,我认为这让我很困惑。任何帮助深表感谢。

4

1 回答 1

2

您可以使用列表推导对字典进行切片:

>>> l=[v for (k,v) in Transitions.iteritems() if k[1] == 3]
>>> sum(l)
1.9196986029286058

这给出了 i = 3 对 j 的总和。要对 i 求和,请替换k[1]k[2]

总而言之,像这样的列表理解非常快,尽管我不能说它们在 scipy 矩阵中的排名如何。

你也可以花哨:

>>> l=[sum([v for (k,v) in Transitions.iteritems() if k[1] == i]) for i in range(1,4,1)]
>>> l
[1.3678794411714423, 1.7357588823428847, 1.9196986029286058]

这为您提供了每一行的总和。


所以以上是基于我对问题的误解。对不起,OP :(

我认为您想用以下内容替换该行:

Transitions[0,i,j] = sum([Transitions[0,i,k] for k in range(1,i+1,1)])
于 2013-03-05T16:27:26.267 回答