首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy不正确的特征值/向量

Numpy不正确的特征值/向量
EN

Stack Overflow用户
提问于 2013-09-12 18:11:41
回答 1查看 3.8K关注 0票数 5

我试图为下列矩阵寻找特征值/向量:

代码语言:javascript
复制
A = np.array([[1, 0, 0],
              [0, 1, 0],
              [1, 1, 0]])

使用代码:

代码语言:javascript
复制
from numpy import linalg as LA
e_vals, e_vecs = LA.eig(A)

我得到的答案是:

代码语言:javascript
复制
print(e_vals)
[ 0.  1.  1.]

print(e_vecs)
[[ 0.          0.70710678  0.        ]
 [ 0.          0.          0.70710678]
 [ 1.          0.70710678  0.70710678]]

不过,我相信以下是答案。

代码语言:javascript
复制
[1] Real Eigenvalue = 0.00000
[1] Real Eigenvector:
0.00000
0.00000
1.00000

[2] Real Eigenvalue = 1.00000
[2] Real Eigenvector:
1.00000
0.00000
1.00000

[3] Real Eigenvalue = 1.00000
[3] Real Eigenvector:
0.00000
1.00000
1.00000

也就是说,特征值-特征向量问题应该是正确的:

代码语言:javascript
复制
# A * e_vecs = e_vals * e_vecs
print(A.dot(e_vecs))
[[ 0.          0.70710678  0.        ]
 [ 0.          0.          0.70710678]
 [ 0.          0.70710678  0.70710678]]

print(e_vals.dot(e_vecs))
[ 1.          0.70710678  1.41421356]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-12 18:22:15

linalg.eig返回的特征值是列向量,因此需要对e_vecs的转置进行迭代(因为2D数组上的迭代在默认情况下返回行向量):

代码语言:javascript
复制
import numpy as np
import numpy.linalg as LA
A = np.array([[1, 0, 0], [0, 1, 0], [1, 1, 0]])
e_vals, e_vecs = LA.eig(A)

print(e_vals)
# [ 0.  1.  1.]
print(e_vecs)
# [[ 0.          0.          1.        ]
#  [ 0.70710678  0.          0.70710678]
#  [ 0.          0.70710678  0.70710678]]

for val, vec in zip(e_vals, e_vecs.T):
    assert np.allclose(np.dot(A, vec), val * vec)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18771486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档