image.png
import pandas as pd
import numpy as np
df = pd.read_excel("表4.1操作.xlsx") # 读取excle
array1 = df.values[1:15,1:6] #讲excel表格数据转化为矩阵
array=array1[0:10,0:5]#样本训练集
test=array1[10:15,0:4]#待测试集
array=array[array[:,4].argsort()] #对矩阵根据来自不同总体(根据矩阵某列)进行排序
#计算矩阵均值,协方差
mean1=np.mean(array[0:5,0:4],axis=0)#矩阵列求和平均
cov1=np.cov(array[0:5,0:4].astype(float),rowvar=False)
mean2=np.mean(array[5:10,0:4],axis=0)
cov2=np.cov(array[5:10,0:4].astype(float),rowvar=False)
#计算待测样本到不同总体的马氏距离
clas=[]
for i in range(4):
test00=np.squeeze(test[i:i+1,0:4])
"""
从数组的形状中删除单维度条目,即把shape中为1的维度去掉,去掉多余的空值[]
array([[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]])
>>> np.squeeze(a)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
"""
ma_diatance_total1=np.dot(np.dot((test00-mean1).T,(np.linalg.inv(cov1))),(test00-mean1))
ma_diatance_total2=np.dot(np.dot((test00-mean2).T,(np.linalg.inv(cov2))),(test00-mean2))
if ma_diatance_total1>ma_diatance_total2:
cla=2
else:cla=1
clas.append(cla)
print("样本距离预测分类:",clas)
image.png