
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表格數(shù)據(jù)轉(zhuǎn)化為矩陣
array=array1[0:10,0:5]#樣本訓(xùn)練集
test=array1[10:15,0:4]#待測試集
array=array[array[:,4].argsort()] #對矩陣根據(jù)來自不同總體(根據(jù)矩陣某列)進(jìn)行排序
#計(jì)算矩陣均值,協(xié)方差
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)
#計(jì)算待測樣本到不同總體的馬氏距離
clas=[]
for i in range(4):
test00=np.squeeze(test[i:i+1,0:4])
"""
從數(shù)組的形狀中刪除單維度條目,即把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("樣本距離預(yù)測分類:",clas)

image.png