首页 > 解决方案 > python中的特征值和向量计算错误

问题描述

我正在尝试以特定格式获取任何矩阵“X”的特征向量和值。我使用该linalg函数来获取特征对,但预期的输出格式与我的结果不同。例如,ve表示特征值和特征向量。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)

标签: pythonnumpymatrixeigenvalueeigenvector

解决方案


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)]

享受!


推荐阅读