python2.7代码如下:
#-*- encoding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import numpy as np
from numpy import *
# X=[ [1,2,1,1],
# [3,3,1,2],
# [3,5,4,3],
# [5,4,5,4],
# [5,6,1,5],
# [6,5,2,6],
# [8,7,1,2],
# [9,8,3,7]]
# X=np.array(X).T#这里注意,[1,2,1,1]在numpy的眼中是一列
np.linalg.eig
X=[[-1,1,0],
[-4,3,0],
[1,0,2]]
print"X=",X
X=matrix(X)
print"------------------下面计算原始矩阵的特征值和特征向量-----------------------"
eigenvalue,featurevector=np.linalg.eig(X)
print"原始矩阵的特征值"
print"eigenvalue=",eigenvalue
print"featurevector=",featurevector
上面的注释很多人在评论里面有争议,那我就详细写一下:
变量/值 | 解释 |
X=np.array(X).T | 注释里面"[1,2,1,1]在numpy的眼中是一列" 说的是X, 这里的[1,2,1,1]已经是代码处理后的向量了
如果您觉得必须写上^T, 那是因为不同数学书规定不同, 有的数学书默认就是列向量, 有的默认就是横向量。
如果您曾经阅读过的数学书默认x不带^T是横向量, 那么对于上面的这句注释, 您在这里将它理解为[1,2,1,1]^T就好
np.dot(x,y)时,y被认为是列向量
|
注:
numpy里面不存在向量的概念,那个都是数组array
上面的注释只是根据需要写的。
下面是百度经验的上的一个计算实例,与上面代码对应
https://jingyan.baidu.com/album/27fa7326afb4c146f8271ff3.html?picindex=9
最终我们可以得到运行结果是:
eigenvalue= [ 2. 1. 1.]
featurevector= [[ 0. 0.40824829 0.40824829]
[ 0. 0.81649658 0.81649658]
[ 1. -0.40824829 -0.40824829]]
--------------------
所以λ=2时,特征向量=[0,0,1]^T
λ=1时,特征向量=[0.40824829,0.81649658, -0.40824829]^T,可以看到,代码结果与百度经验上的ppt的结果完全一致。
注意:
numpy的计算结果是经过单位化的,百度文库上的ppt单位化以后也是这个结果,所以是一致的。