如何用Python获取HMM相关矩阵零空间的论文指定形式结果?
问题:如何得到论文指定形式的零空间结果
背景说明
我尝试实现某论文第5页的公式(6),该公式用于构建矩阵 ( N ):
[
N = \begin{bmatrix} C \ CP \ CP^2 \ \vdots \ CP^{n-1} \end{bmatrix}
]
其中 ( C ) 是HMM的发射矩阵,( P ) 是状态转移矩阵,最终目标是计算 ( N ) 并求解其零空间。
我采用论文示例4的输入矩阵:
- 状态转移矩阵 ( P ):
[
P = \begin{bmatrix} \frac{1}{2} & 0 & \frac{1}{3} & \frac{1}{4} \ 0 & \frac{1}{3} & \frac{1}{3} & \frac{1}{4} \ \frac{1}{2} & 0 & \frac{1}{3} & 0 \ 0 & \frac{2}{3} & 0 & \frac{1}{2} \end{bmatrix}
] - 发射矩阵 ( C ):
[
C = \begin{bmatrix} \frac{1}{4} & \frac{1}{4} & \frac{1}{2} & \frac{7}{16} \ \frac{3}{4} & \frac{3}{4} & \frac{1}{2} & \frac{9}{16} \end{bmatrix}
]
论文给出的零空间结果为整数形式:
[
\begin{bmatrix} 3 & -1 \ -3 & -2 \ 1 & -6 \ -1 & 8 \end{bmatrix}
]
我的实现代码
我使用以下Python代码进行计算:
import numpy as np from scipy.linalg import null_space n = 4 P = np.array([[1/2, 0, 1/3, 1/4], [0, 1/3, 1/3, 1/4], [1/2, 0, 1/3, 0], [0, 2/3, 0, 1/2]]) C = np.array([[1/4, 1/4, 1/2, 7/16], [3/4, 3/4, 1/2, 9/16]]) N = C for i in range(1, n): N = np.vstack((N, np.dot(C, np.linalg.matrix_power(P, i)))) ns = null_space(N) print(ns)
当前输出结果
运行代码后得到的零空间结果为:
[[ 0.71390642 -0.01189748] [-0.68971636 -0.18464902] [ 0.07257016 -0.58963951] [-0.09676022 0.78618601]]
虽然该结果与论文结果张成的是同一个零空间,但我想知道如何用Python得到论文中的整数形式结果。
内容的提问来源于stack exchange,提问作者Halsey
相关产品推荐
相关产品推荐

