Python中的线性代数:计算3x3矩阵的特征向量

Python中的线性代数:计算3x3矩阵的特征向量,python,linear-algebra,eigenvalue,eigenvector,Python,Linear Algebra,Eigenvalue,Eigenvector,我正在使用Python来推导与3x3矩阵中的特征值相关联的特征向量。我的代码返回正确的特征值,但错误的特征向量 A = np.array([[-2, -4, 2], [-2, 1, 2], [4, 2, 5]]) print (A) print ('-------------------------------------------------------') eigenvalues, eigenvectors = np.l

我正在使用Python来推导与3x3矩阵中的特征值相关联的特征向量。我的代码返回正确的特征值,但错误的特征向量

A = np.array([[-2, -4,  2],
              [-2,  1,  2],
              [4,   2,  5]])
print (A)
print ('-------------------------------------------------------')

eigenvalues, eigenvectors = np.linalg.eig(A) # must use this line of code exactly 
print(f'eigenvalues of matrix A are:{eigenvalues}')
print ('-------------------------------------------------------')
print(f'eigenvectors of matrix A are:{eigenvectors}')


例如,与值6关联的特征向量应该是[1,6,16],而不是代码输出的值。

它是正确的,您可以通过第二个特征值和特征向量的特征向量/特征值条件来检查它

其中,
u
是特征向量,
lambda
是其特征值。 因此,我们将特征向量乘以A,并检查它是否等于将相同的特征向量乘以其特征值w[1]

>>> w, v = np.linalg.eig(A)
# w contains the eigenvalues. 
# v contains the corresponding eigenvectors, one eigenvector per column. 
# The eigenvectors are normalized so their Euclidean norms are 1
>>> u = v[:,1]
>>> print(u)
[ 0.53452248, -0.80178373, -0.26726124]

>>> lam = w[1]
>>> lam
3.0

>>> print(np.dot(A,u))
[ 1.60356745 -2.40535118 -0.80178373]
>>> print(lam*u)
[ 1.60356745 -2.40535118 -0.80178373]

每个特征值有无穷多个特征向量。代码工作正常。从numpy文档返回特征值矩阵,使得“归一化(单位“长度”)特征向量,使得列v[:,i]是对应于特征值w[i]的特征向量。”查看特征向量矩阵的最后一列。它是[1,6,16],只是标准化了。具体来说,返回的特征向量被标准化为单位长度。@PineNuts0如果这回答了您的问题,请接受它。