import numpy as np
#初始化矩阵
data = np.array([
[2.5,2.4],
[0.5,0.7],
[2.2,2.9],
[1.9,2.2],
[3.1,3.0],
[2.3,2.7],
[2, 1.6],
[1, 1.1],
[1.5,1.6],
[1.1,0.9]
])
#计算平均值
avg_x = 0.00
avg_y = 0.00
x = data[:,0]
y = data[:,1]
for i in x:
avg_x += i
for i in y:
avg_y += i
avg_x /= data.shape[0]
avg_y /= data.shape[0]
avg_x = round(avg_x,2)
avg_y = round(avg_y,2)
row = data.shape[0]
#计算减去平均值的矩阵
for i in range(0,row):
data[i][0] -= avg_x
data[i][1] -= avg_y
cov = np.cov(data[:,0],data[:,1])
eig = np.linalg.eig(cov)
#求得特征值和特征向量
evl = eig[0]
evt = eig[1]
maxx = -100
max_id = 0
#求得最大值以及最大值所对应的索引
for i in range(0,evl.shape[0]):
if evl[i] > maxx:
max_id = i
maxx = evl[i]
ans_evt = evt[:,max_id]
#得到最后矩阵
final_np = data * ans_evt
#将矩阵的行元素相加得到最后结果
for i in range(0,final_np.shape[0]):
final_np[i][0] += final_np[i][1]
final_ans = final_np[:,0]
final_ans = final_ans.reshape(final_ans.shape[0],1)
print(final_ans)