从矩阵乘法的角度理解马氏链

时间:2015-04-21 04:45:47

标签: python numpy probability markov-chains

a lecture on YouTube中,一位教授说Markov Chains可以简化为Start(S) * Transition Matrix(Q)^State#

我试图用numpy来复制它。

import numpy as np
S = np.zeros(shape=(1,2))
Q = np.zeros(shape=(2,2))

#starting state
S[0] = [.2,.8]

#transition matrix
Q[0] = [.9, .1]
Q[1] = [.7, .3]

如果我print S.dot(Q).dot(Q),它会给我[[0.848 0.152]]这似乎是正确的答案(未来的两个步骤)。

但是,这与SQ^x看起来并不完全相同,所以我尝试了print S.dot(np.power(Q,2)),但这给了我[[0.554 0.074]]。我哪里出错了,或者我在这里不懂什么?

2 个答案:

答案 0 :(得分:7)

表达式S.dot(Q).dot(Q)S.dot(np.power(Q,2))不是一回事。第一个是你想要的行为,而S.dot(np.power(Q,2))Q中的每个元素提升到第二个权力。文档here

对于比重复链接.dot(Q)更紧凑的表示法,请使用:

S.dot(np.linalg.matrix_power(Q,n))

其中n是所需的力量。

答案 1 :(得分:4)

坚持用点 np.power*运算符是元素乘法。看看:

print Q.dot(Q)

打印:

[[ 0.88  0.12]
 [ 0.84  0.16]]

这是我手工获得的。 而,

print np.power(Q, 2)
print Q * Q

都打印:

[[ 0.81  0.01]
 [ 0.49  0.09]]

所以S.dot(Q).dot(Q)是正确的。