由Python计算的矩阵的特征向量似乎不是一个特征向量

事先道歉,Python不是我的强项。由Python计算的矩阵的特征向量似乎不是一个特征向量

与矩阵的实际特征值(如Python计算)相对应的特征向量看起来不是特征向量,而由Wolfram Alpha计算的特征向量似乎可行。 (我的同事证实,同一病理执行R中的计算时,虽然我没有成绩单似乎是这样。)代码片段:

>>> import numpy as np 

>>> in_matrix = np.array([[0.904, 0.012, 0.427], [-0.0032, 0.99975, -0.02207], [-0.4271, 0.0186, 0.904]])

>>> evals, evecs = np.linalg.eig(in_matrix)

>>> print evals

[ 0.90388357+0.42760138j 0.90388357-0.42760138j 0.99998285+0.j]

>>> print evecs[2]

[ 0.70696571+0.j 0.70696571-0.j 0.01741090+0.j]

>>> print in_matrix.dot(evecs[2])

[ 0.65501505+0.j 0.70414242+0.j -0.27305604+0.j]

注意,由in_matrix变量乘以evecs[2]产生新向量不是evecs[2](特征向量应该是1)。

将相同的矩阵插入Wolfram Alpha会产生真实特征值的特征向量(-0.0474067, -0.998724, 0.0174109)。按照预期,该特征向量乘以in_matrix确实产生相同的向量。

>>> wolfram_vec = np.array([-0.0474067, -0.998724, 0.0174109]) 

>>> print in_matrix.dot(wolfram_vec)

[-0.04740589 -0.99870688 0.01741059]

的钨(正确的)本征向量对应于负Y轴,而numpy的给出(sqrt(2), sqrt(2), 0)。底线:numpy的特征向量不是特征向量,但Wolfram Alpha特征向量是正确的(并且看起来是这样的)。任何人都可以解释这一点吗?

这已经在Mac OS X上的Python 2.7.10的标准安装和CentOS 6.8上的Python 2.7.8的自定义安装上进行了测试。

回答:

引用文档:

v : (..., M, M) array 

The normalized (unit "length") eigenvectors, such that the

column ``v[:,i]`` is the eigenvector corresponding to the

eigenvalue ``w[i]``.

你需要提取的列,evecs[:, i],而不是行,evecs[i]

In [30]: evecs[:, 2] 

Out[30]: array([-0.04740673+0.j, -0.99872392+0.j, 0.01741090+0.j])

您可能会认出它与Wolfram矢量相同。所有三个特征向量都是正确的:

In [31]: in_matrix.dot(evecs[:, 0]) - evals[0] * evecs[:, 0] 

Out[31]:

array([ 5.55111512e-17 +1.11022302e-16j,

-7.11236625e-17 +1.38777878e-17j, 2.22044605e-16 -1.66533454e-16j])

In [32]: in_matrix.dot(evecs[:, 1]) - evals[1] * evecs[:, 1]

Out[32]:

array([ 5.55111512e-17 -1.11022302e-16j,

-7.11236625e-17 -1.38777878e-17j, 2.22044605e-16 +1.66533454e-16j])

In [33]: in_matrix.dot(evecs[:, 2]) - evals[2] * evecs[:, 2]

Out[33]: array([ 3.46944695e-17+0.j, 4.44089210e-16+0.j, 3.15719673e-16+0.j])

其中每个结果[0,0,0]在预期精度内。

以上是 由Python计算的矩阵的特征向量似乎不是一个特征向量 的全部内容, 来源链接: utcz.com/qa/258742.html

回到顶部