python - numPy 中的意外特征向量

标签 python numpy linear-algebra eigenvector

我看过this问题,这与我尝试使用 numPy 在 Python 中计算主要特征向量有关。

我正在尝试计算 n x n 矩阵的主要特征向量,而不必使用太多繁重的线性代数。我粗略地研究了行列式、特征值、特征向量和特征多项式,但我更愿意依靠 numPy 实现来查找特征值,因为我相信它比我自己的更有效。

我遇到的问题是我使用了这段代码:

    markov = array([[0.8,0.2],[.1,.9]])

    print eig(markov)

...作为测试,得到了这个输出:

    (array([ 0.7,  1. ]), array([[-0.89442719, -0.70710678],
           [ 0.4472136 , -0.70710678]]))

让我担心的是,根据 Perron-Frobenius 定理,第二个特征向量的所有分量都应该是正的(因为根据维基百科,“具有正项的实方矩阵具有唯一的最大实特征值并且相应的特征向量具有严格的正分量”)。

有人知道这里发生了什么吗? numPy 错了吗?我在 ZFC 中发现不一致了吗?或者只是我对线性代数、Python、numPy 或这三者的某种组合一窍不通?

感谢您提供的任何帮助。此外,这是我的第一个 SO 问题(虽然我曾经在 cstheory.se 上很活跃),所以任何关于提高我的问题清晰度的建议也将不胜感激。

最佳答案

您只是误解了 eig 的返回值。根据文档,第二个返回参数是

The normalized (unit “length”) eigenvectors, such that the column v[:,i] is the eigenvector corresponding to the eigenvalue w[i].

所以特征值1对应的特征向量不是[ 0.4472136 , -0.70710678],而是[-0.70710678, -0.70710678],如可以很容易地验证:

>>> markov.dot([ 0.4472136 , -0.70710678]) # not an eigenvector
array([ 0.21634952, -0.59167474])
>>> markov.dot([-0.70710678, -0.70710678]) # an eigenvector
array([-0.70710678, -0.70710678])

关于python - numPy 中的意外特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18708642/

相关文章:

python - 计算时间顺序坐标之间的距离和速度

python正则表达式也匹配特殊字符

python:numpy reshape 数组

c++ - 将线性代数库与 Boost::Units 相结合

python - subprocess.run 像 Popen 一样在后台执行

python - PyOpenGL 使用 cx_Freeze 卡住后引发异常?

Python 读取文本文件不适用于 numpy/pandas

python - 无法从 VSCode 外部在我的 macbook pro 中使用 Python3 numpy(或 matplotlib 等)

python - 使用 Python 对三对角对称稀疏矩阵进行对角化

python - `solve` 相当于 `pinv` 吗?