python 中的特征值和向量计算错误
Eigen values and vectors calculation error in python
我正在尝试以特定格式获取任何矩阵 'X' 的特征向量和值。我使用 linalg
函数来获取特征对,但预期的输出格式与我的结果不同。例如,v
和 e
表示特征值和特征向量。 v1 = 1
, e1 = [1,0,0]
, v2 = 2
, e2 = [0,1,0]
, v3 = 3
, e3 = [0,0,1]
.
所以在这个例子中,矩阵X的特征对应该是Ep =[(1, [1,0,0]) (2, [0,1,0]), (3, [0,0,1])]
。
这里P[0]
表示第一个特征对(1,[1,0,0])
,其中特征值为1,特征向量为[1,0,0]
.
你能帮我进一步编码这部分吗?
e,v = np.linalg.eigh(X)
np.linalg.eigh
首先,应该注意 np.linalg.eigh
计算厄米特矩阵的特征值——这不适用于所有矩阵。如果你想计算任何矩阵的特征值 X
你应该切换到 np.linalg.eig
:
import numpy as np
L = np.diag([1,2,3])
V = np.vstack(([1,0,0],[0,1,0],[0,0,1]))
# X = V@L@V.T (eigendecomposition)
X = V@L@V.T
w,v = np.linalg.eig(X)
assert (np.diag(w) == L).all()
assert (v == V).all()
特征对
要构建特征对,只需使用一些列表理解:
import numpy as np
# X = V@L@V.T (eigendecomposition)
X = np.diag([1,2,3])
w,v = np.linalg.eig(X)
Ep = [(val,vec.tolist()) for val,vec in zip(w,v)]
尽情享受吧!
我正在尝试以特定格式获取任何矩阵 'X' 的特征向量和值。我使用 linalg
函数来获取特征对,但预期的输出格式与我的结果不同。例如,v
和 e
表示特征值和特征向量。 v1 = 1
, e1 = [1,0,0]
, v2 = 2
, e2 = [0,1,0]
, v3 = 3
, e3 = [0,0,1]
.
所以在这个例子中,矩阵X的特征对应该是Ep =[(1, [1,0,0]) (2, [0,1,0]), (3, [0,0,1])]
。
这里P[0]
表示第一个特征对(1,[1,0,0])
,其中特征值为1,特征向量为[1,0,0]
.
你能帮我进一步编码这部分吗?
e,v = np.linalg.eigh(X)
np.linalg.eigh
首先,应该注意 np.linalg.eigh
计算厄米特矩阵的特征值——这不适用于所有矩阵。如果你想计算任何矩阵的特征值 X
你应该切换到 np.linalg.eig
:
import numpy as np
L = np.diag([1,2,3])
V = np.vstack(([1,0,0],[0,1,0],[0,0,1]))
# X = V@L@V.T (eigendecomposition)
X = V@L@V.T
w,v = np.linalg.eig(X)
assert (np.diag(w) == L).all()
assert (v == V).all()
特征对
要构建特征对,只需使用一些列表理解:
import numpy as np
# X = V@L@V.T (eigendecomposition)
X = np.diag([1,2,3])
w,v = np.linalg.eig(X)
Ep = [(val,vec.tolist()) for val,vec in zip(w,v)]
尽情享受吧!