我试图对具有类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程序员,所以我习惯了矩阵,我认为这让我感到困惑。非常感谢任何帮助。
答案 0 :(得分: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)])