从矩阵乘法的角度理解马尔可夫链

Understanding Markov Chains in terms of Matrix Multiplication

a lecture on YouTube中,一位教授说马尔可夫链可以简化为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]]。我哪里错了,或者我在这里不明白什么?

表达式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 是所需的功率。

坚持使用圆点。
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)是正确的。