【问题标题】:Does Scipy linalg.eig produce all possible eigenvectors?Scipy linalg.eig 是否产生所有可能的特征向量?
【发布时间】:2018-08-22 08:13:24
【问题描述】:

我有这个矩阵a -

array([[2, 1],
       [1, 2]]) 

这个矩阵有[1, 3]特征值和以下特征向量:

array([1, -1])
array([1, 1])

但是当我使用 Scipy 的 linalg.eig 函数时,它会产生以下结果:

>>>  linalg.eig(a)
(array([3.+0.j, 1.+0.j]), array([[ 0.70710678, -0.70710678],
    [ 0.70710678,  0.70710678]]))

特征值与上面相同,但这里产生的特征向量与前面提到的不同。

我在这里缺少什么?另外,如何找出一个矩阵可以有多少个特征向量?

【问题讨论】:

  • 特征向量被归一化;你看到的是1/sqrt(2) 乘以你期望的特征向量。由于特征向量的任意倍数也是特征向量,因此这是库通常采用的约定。
  • 可能你的特征向量是四舍五入的,因为函数的答案是正确的
  • @hiro protagonist 好像是这样。仔细阅读文档,它实际上说函数会返回归一化的特征向量。
  • @Alex 否。正如另一条评论中提到的,函数返回归一化的特征向量。 Scipy 文档还提到了归一化特征向量。
  • 您能回答并接受您的问题,以便我们关闭它吗?

标签: python scipy eigenvector


【解决方案1】:

每个特征值有无限多个特征向量。即,如果v 是一个特征向量并且a 是任何非零数,那么a*v 也是一个特征向量。因此,任何程序都不可能返回所有特征向量。他们所做的是返回一组最大的linearly independent 特征向量。可以通过多种方式选择这样的集合。

对于几何重数为 1 的特征值(即一维特征空间),有一个几乎规范的选择:返回范数为 1 的特征向量。这里仍然存在一定程度的任意性,因为如果 u 是归一化的特征向量, -u 也是如此。选择哪一个取决于算法的细节,并且可能因一个线性代数包而异。

对于几何多重性大于 1 的特征值(即 2 维或更多维的特征空间),任意程度甚至更大。考虑矩阵

2 0 
0 2

每个非零向量都是这个矩阵的特征向量。任何两个线性独立的向量都可以是这里的答案。 (到目前为止,SciPy 返回最明显的选择:[0, 1] 和 [1, 0] - 但这不是保证。)

在线性代数课程中,有人可能被教导为每个特征空间选择一个标准正交基。无论好坏,SciPy 都不是:当特征空间的维度大于 1 时,它为其选择的基础不一定是正交的。一个例子是矩阵

1 2 1 1
1 1 1 1
1 1 1 1
1 1 1 1

我在其中添加了“2”以使其不对称。

from scipy.linalg import eig
import numpy as np
m = np.ones((4, 4))
m[0, 1] = 2
evals, evecs = eig(m)
print(np.around(evals, 2))
print(np.around(evecs, 2))

打印特征值[-0.24, 4.24, 0, 0]和对应的特征向量

[[-0.88  0.58 -0.77 -0.77]
 [ 0.27  0.47 -0.   -0.  ]
 [ 0.27  0.47  0.61  0.16]
 [ 0.27  0.47  0.16  0.61]]

最后两个特征向量来自同一个特征空间(0,多重性为 2),因此可以选择它们彼此正交,但 SciPy 没有这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 2011-12-10
    • 2022-09-27
    • 2015-06-30
    • 1970-01-01
    • 2017-12-05
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多