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 に答える