编程语言
首页 > 编程语言> > Python numpy / scipy特征向量似乎对马尔可夫链模型不正确

Python numpy / scipy特征向量似乎对马尔可夫链模型不正确

作者:互联网

我有一个很大的(351,351)numpy转换矩阵.我想使用numpy找到状态向量(我也尝试过具有相同功能的scipy).

sstate = np.linalg.eig(T)[1][:,0]

所以我认为应该给出主导左特征值的特征向量.主要的左特征值是10j.这有点正确,占优势的左特征值应为1,我对此有点新,所以我不知道如何处理虚数.此外,sstate向量包含所有复数.现在,尝试检查这是否正确,我执行以下矩阵乘法:

np.dot(sstate,T)

如果正确完成,这应该返回与’sstate’相同的向量.我不确定为什么这不起作用.想象中的数字可能是问题吗?此外,该转换矩阵是否可能不包含稳态矢量.我的过渡状态矩阵中的每一行和每列应该总和为1,但是,我发现舍入误差导致每行和每列总和只有大约1.

任何和所有的帮助表示赞赏!

解决方法:

转换矩阵是对称的吗?如果没有,考虑检查TT(转置),因为你需要确保你正在查看正确的状态转换:你需要你的随机矩阵的左特征向量,但几乎所有开箱即用的科学包(包括numpy)默认为计算正确的特征向量(这与教科书中的原因相同,在处理这些东西时,你需要通过行向量而不是通常的矩阵 – 列乘法进行预乘).

也许还有sstate = sstate / sstate.sum()以确保概率总和为1,尽管是舍入.

这是an example with numpy.

从注释中添加了关于右侧与左侧特征向量的详细信息:

eig和它之类的东西会计算出正确的特征向量,就像在向量v中那样,对于标量lambda,Av =(lambda)v.你需要的是A的左特征向量,所以满足v.T * A =(lambda)v.T的东西,这不仅仅是右特征向量的转置或共轭.

因此,您需要基于A.T计算特征向量,但是在检查状态向量是否确实是静止时,您不希望使用A.T进行计算.您将要查看np.dot(sstate,T)(验证sstate是行向量,而不是列),并评估(并且可能还有关于重新规范化以帮助舍入的另一点).

标签:python,numpy,linear-algebra,eigenvector,markov-chains
来源: https://codeday.me/bug/20190623/1275554.html