import xlrd
import numpy as np
import pandas as pd
def read_excel(filename):
data_list = []
table = xlrd.open_workbook(filename).sheets()[0]
for i in range(table.nrows):
data_list.append(table.row_values(i))
return data_list
#计算矩阵均值
def meanX(dataX):
return np.mean(dataX,axis = 0)
#计算矩阵标准差
def stdX(dataX):
return np.std(dataX,axis = 0,ddof = 1)
#return np.array([1.15166,20.40489,2.70361])
def pca(Xmat,k):
m,n = np.shape(Xmat)
#减去均值
average = meanX(Xmat)
data_adjust1 = []
avgs = np.tile(average,(m,1))
data_adjust1 = Xmat-avgs
#除以标准差
std = stdX(data_adjust1)
data_adjust2 = []
stds = np.tile(std,(m,1))
data_adjust2 = data_adjust1/stds
#计算协方差矩阵
covX = np.cov(data_adjust2.T)
#计算协方差矩阵的特征值与特征向量
featValue,featVec = np.linalg.eig(covX)
#按照featValue从大到小排序
index = np.argsort(-featValue)
finalData = []
if k>n:
print('k必须小于参数个数')
return
else:
selectVec = np.matrix(featVec.T[index[:k]])
t = selectVec.T
#计算载荷矩阵
#将标准化后的矩阵以及主成分矩阵数组化
data_adjust3 = np.matrix(data_adjust2.T).getA()
finalData1 = finalData.T.getA()
zaihe_list = []
for each in data_adjust3:
zaihe_list.append(np.corrcoef(each,finalData1[0])[0][1])
#计算特征向量,荷载矩阵除以特征值
featValues = featValue[index[0]]
tezheng = np.array(zaihe_list)/featValues
resultX = data_adjust2*np.matrix(tezheng).T
return resultX


雷达卡



京公网安备 11010802022788号







