由numpy.linalg.eig创建的特征向量似乎不正确 [英] eigenvectors created by numpy.linalg.eig don't seem correct

查看:249
本文介绍了由numpy.linalg.eig创建的特征向量似乎不正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建一个任意的2x2矩阵:

I create an arbitrary 2x2 matrix:

In [87]: mymat = np.matrix([[2,4],[5,3]])

In [88]: mymat
Out[88]: 
matrix([[2, 4],
        [5, 3]])

我尝试使用numpy.linalg.eig计算特征向量:

I attempt to calculate eigenvectors using numpy.linalg.eig:

In [91]: np.linalg.eig(mymat)
Out[91]: 
(array([-2.,  7.]),
 matrix([[-0.70710678, -0.62469505],
        [ 0.70710678, -0.78086881]]))

In [92]: eigvec = np.linalg.eig(mymat)[1][0].T

In [93]: eigvec
Out[93]: 
matrix([[-0.70710678],
        [-0.62469505]])

我将特征向量之一与矩阵相乘,期望结果是一个向量,该向量是特征向量的标量倍数.

I multiply one of my eigenvectors with my matrix expecting the result to be a vector that is a scalar multiple of my eigenvector.

In [94]: mymat * eigvec
Out[94]: 
matrix([[-3.91299375],
        [-5.40961905]])

但是不是.谁能告诉我这里出了什么问题?

However it is not. Can anyone explain to me what is going wrong here?

推荐答案

来自

v:(...,M,M)数组
归一化的(单位长度")特征向量,使得 列v[:,i]是对应于 特征值w[i].

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

您想要的是列,而不是行.

You want the columns, not the rows.

>>> mymat = np.matrix([[2,4],[5,3]])
>>> vals, vecs = np.linalg.eig(mymat)
>>> vecs[:,0]
matrix([[-0.70710678],
        [ 0.70710678]])
>>> (mymat * vecs[:,0])/vecs[:,0]
matrix([[-2.],
        [-2.]])
>>> vecs[:,1]
matrix([[-0.62469505],
        [-0.78086881]])
>>> (mymat * vecs[:,1])/vecs[:,1]
matrix([[ 7.],
        [ 7.]])

这篇关于由numpy.linalg.eig创建的特征向量似乎不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆