gpt4 book ai didi

python - Numpy 的特征值/向量不正确

转载 作者:太空狗 更新时间:2023-10-30 02:46:49 26 4
gpt4 key购买 nike

我试图找到以下矩阵的特征值/向量:

A = np.array([[1, 0, 0],
[0, 1, 0],
[1, 1, 0]])

使用代码:

from numpy import linalg as LA
e_vals, e_vecs = LA.eig(A)

我得到这个作为答案:

print(e_vals)
[ 0. 1. 1.]

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

不过,我相信下面应该是答案。

[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

也就是说,特征值-特征向量问题表明以下应该成立:

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

最佳答案

linalg.eig 返回的特征值是列向量,因此您需要迭代 e_vecs转置(因为迭代了二维数组默认返回行向量):

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)

关于python - Numpy 的特征值/向量不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com