gpt4 book ai didi

python - 如何计算 numpy 特征值和特征向量

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:40 25 4
gpt4 key购买 nike

我正在使用 numpy 计算对称方形数组的特征值和特征向量。我的数组是:

L = [[ 2. -1. -1.  0.  0.  0.]
[-1. 3. 0. -1. 0. -1.]
[-1. 0. 2. -1. 0. 0.]
[ 0. -1. -1. 3. -1. 0.]
[ 0. 0. 0. -1. 2. -1.]
[ 0. -1. 0. 0. -1. 2.]]

执行 numpy.linalg.eig(L) 的结果如下所示

特征值:

[ 5.00000000e+00,   
3.96872205e-16,
1.00000000e+00,
2.00000000e+00,
3.00000000e+00,
3.00000000e+00 ]

特征向量:

[[ -2.88675135e-01   4.08248290e-01  -5.00000000e-01  4.08248290e-01   -4.36632863e-01   4.44614891e-01]
[ 5.77350269e-01 4.08248290e-01 -3.34129212e-16 4.08248290e-01 -1.08813217e-01 -5.41271705e-01]
[ 2.88675135e-01 4.08248290e-01 -5.00000000e-01 4.08248290e-01 5.45446080e-01 9.66568140e-02]
[ -5.77350269e-01 4.08248290e-01 1.06732810e-16 4.08248290e-01 -1.08813217e-01 -5.41271705e-01]
[ 2.88675135e-01 4.08248290e-01 5.00000000e-01 4.08248290e-01 -4.36632863e-01 4.44614891e-01]
[ -2.88675135e-01 4.08248290e-01 5.00000000e-01 -4.08248290e-01 5.45446080e-01 9.66568140e-02]]

结果接近(如果归一化)您在 analytically 时得到的结果计算它们,但似乎在特征值和特征向量中引入了一些错误。有什么方法可以使用 numpy 绕过这些错误吗?

这些错误从何而来? numpy 使用什么算法?

最佳答案

如果你想要解析推导的精度,你需要使用symbolic computation ,这是 Wolfram Alpha、Mathematica 和相关系统使用的。在 Python 中,您可能需要查看 SymPy ,例如。

numerical computation嵌入到您正在使用的 NumPy 包中的那个本质上会受到 floating point numerical representations 的小错误和变迁的影响。 .这种误差和近似值在数值计算中是不可避免的。

这是一个例子:

from sympy import Matrix, pretty

L = Matrix([[ 2, -1, -1, 0, 0, 0,],
[-1, 3, 0, -1, 0, -1,],
[-1, 0, 2, -1, 0, 0,],
[ 0, -1, -1, 3, -1, 0,],
[ 0, 0, 0, -1, 2, -1,],
[ 0, -1, 0, 0, -1, 2,]])

print "eigenvalues:"
print pretty(L.eigenvals())
print
print "eigenvectors:"
print pretty(L.eigenvects(), num_columns=132)

产量:

eigenvalues:
{0: 1, 1: 1, 2: 1, 3: 2, 5: 1}

eigenvectors:
⎡⎛0, 1, ⎡⎡1⎤⎤⎞, ⎛1, 1, ⎡⎡-1⎤⎤⎞, ⎛2, 1, ⎡⎡1 ⎤⎤⎞, ⎛3, 2, ⎡⎡1 ⎤, ⎡0 ⎤⎤⎞, ⎛5, 1, ⎡⎡1 ⎤⎤⎞⎤
⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥ ⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥
⎢⎜ ⎢⎢1⎥⎥⎟ ⎜ ⎢⎢0 ⎥⎥⎟ ⎜ ⎢⎢1 ⎥⎥⎟ ⎜ ⎢⎢-1⎥ ⎢-1⎥⎥⎟ ⎜ ⎢⎢-2⎥⎥⎟⎥
⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥ ⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥
⎢⎜ ⎢⎢1⎥⎥⎟ ⎜ ⎢⎢-1⎥⎥⎟ ⎜ ⎢⎢-1⎥⎥⎟ ⎜ ⎢⎢0 ⎥ ⎢1 ⎥⎥⎟ ⎜ ⎢⎢-1⎥⎥⎟⎥
⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥ ⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥
⎢⎜ ⎢⎢1⎥⎥⎟ ⎜ ⎢⎢0 ⎥⎥⎟ ⎜ ⎢⎢-1⎥⎥⎟ ⎜ ⎢⎢-1⎥ ⎢-1⎥⎥⎟ ⎜ ⎢⎢2 ⎥⎥⎟⎥
⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥ ⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥
⎢⎜ ⎢⎢1⎥⎥⎟ ⎜ ⎢⎢1 ⎥⎥⎟ ⎜ ⎢⎢-1⎥⎥⎟ ⎜ ⎢⎢1 ⎥ ⎢0 ⎥⎥⎟ ⎜ ⎢⎢-1⎥⎥⎟⎥
⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥ ⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥
⎣⎝ ⎣⎣1⎦⎦⎠ ⎝ ⎣⎣1 ⎦⎦⎠ ⎝ ⎣⎣1 ⎦⎦⎠ ⎝ ⎣⎣0 ⎦ ⎣1 ⎦⎦⎠ ⎝ ⎣⎣1 ⎦⎦⎠⎦

虽然 ASCII pretty-print 正在努力工作以提供甚至准好看的输出,但您可以看到您正在获得符号计算的精确输出。如果您使用 IPython 并将其设置为显示 LaTeX 输出,您将 get a nicer display .

关于python - 如何计算 numpy 特征值和特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28727717/

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