【发布时间】:2022-05-09 09:56:10
【问题描述】:
我有这个代码:
import numpy as np
from scipy.linalg import eig
transition_mat = np.matrix([
[.95, .05, 0., 0.],\
[0., 0.9, 0.09, 0.01],\
[0., 0.05, 0.9, 0.05],\
[0.8, 0., 0.05, 0.15]])
S, U = eig(transition_mat.T)
stationary = np.array(U[:, np.where(np.abs(S - 1.) < 1e-8)[0][0]].flat)
stationary = stationary / np.sum(stationary)
>>> print stationary
[ 0.34782609 0.32608696 0.30434783 0.02173913]
但我看不懂这行:
stationary = np.array(U[:, np.where(np.abs(S - 1.) < 1e-8)[0][0]].flat)
谁能解释一下:U[:, np.where(np.abs(S - 1.) < 1e-8)[0][0]].flat?
我知道例程返回S: eigenvalue, U: eigenvector。我需要找到特征值1对应的特征向量。我写了下面的代码:
for i in range(len(S)):
if S[i] == 1.0:
j = i
matrix = np.array(U[:, j].flat)
我得到了输出:
: [ 0.6144763 0.57607153 0.53766676 0.03840477]
但它没有给出相同的输出。为什么?!
【问题讨论】:
-
嗯...它看起来从 U 中抓取元素,其中 S 中的相应元素的值为 1...但我不确定那是什么
[0][0]是为了。然后它将整个事物展平为一维数组。 -
嗨,凯文,感谢您的回答。你能告诉我这段代码是如何工作的:where(np.abs(S-1.)
-
你试过一个简单的例子吗?阅读任何文档? 究竟是什么让你感到困惑?
-
@jonrsharpe,是的,我还在尝试。我已经用我的代码更新了这个问题。请检查。谢谢。
-
这里的页边距太小,无法完整地写下所有内容。只需仔细阅读
numpy.where的文档,然后尝试示例! ;)
标签: python python-3.x numpy