我有一个大的(351,351)numpy过渡矩阵。我想使用numpy(我还尝试了具有完全相同功能的scipy)找到此矩阵的状态向量。
sstate = np.linalg.eig(T)[1][:,0]
我认为这应该给我主左特征值的特征向量。主左特征值是1+0j。这有些正确,主左特征值应该是1,但我对虚数不太了解。此外,sstate向量包含所有复数。现在,尝试检查是否正确,我进行以下矩阵乘法:
np.dot(sstate,T)
如果正确执行,这应该返回与'sstate'相同的向量。我不确定为什么这不起作用。虚数可能是问题吗?此外,这个转移矩阵可能不包含稳态向量。我的转移状态矩阵中的每一行和每一列都应该总和为1,然而,我发现舍入误差导致每一行和每一列的总和只约为1。
非常感谢您的帮助!
eig
和类似的函数会计算出正确的特征向量,即满足Av = (lambda)v
(其中lambda
为标量)的向量v
。但是你需要的是矩阵A
的左特征向量,也就是满足v.T*A = (lambda)v.T
的向量,这个向量不仅仅是右特征向量的转置或共轭。 - elyA.T
计算特征向量,但在验证状态向量是否真的是稳态时,不要再使用A.T
进行计算。你需要查看np.dot(sstate, T)
(验证sstate
是行向量而不是列向量),并对其进行评估(可能还要考虑舍入误差的问题)。 - ely