第一种实现方法(适用于已知协方差矩阵的情况):
#Python实现将Excel的数值型数据转成矩阵,并计算其特征值和特征向量的计算方法
import numpy as np
import pandas as pd
import xlrd
from sklearn import preprocessing
def excel_to_matrix(path):
table = xlrd.open_workbook(path).sheets()[0]#获取第一个sheet表
row = table.nrows # 行数
col = table.ncols # 列数
datamatrix = np.zeros((row, col))#生成一个nrows行ncols列,且元素均为0的初始矩阵
for x in range(col):
cols = np.matrix(table.col_values(x)) # 把list转换为矩阵进行矩阵操作
datamatrix[:, x] = cols # 按列把数据存进矩阵中
#特征值和特征向量的计算
print ('求矩阵的特征值与特征向量:')
print (eig(datamatrix))#特征值是按照列放的,结果中的一列代表一个特征向量
return datamatrix#返回的是Excel中的数据转成矩阵的结果
datafile = u'D:\\Users\\DUANPT\\Desktop\\3.xlsx'#数据文件所在路径
excel_to_matrix(datafile)#执行定义的函数
'''
输出的结果如下所示:
求矩阵的特征值与特征向量:
(array([51.06975432, 8.16965705, 13.74947752]), 该列是特征值
array([[-0.5070749 , -0.69860555, -0.50480227],这是特征向量,按列排放的