我正在尝试以特定格式获取任何矩阵“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
计算 Hermitian 矩阵的特征值 - 这并不适用于所有矩阵。如果您想计算任何矩阵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)]
享受吧!
关于python - python中的特征值和向量计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58253826/