必要的注釋已經寫在code里面了;
import operator from numpy import* def init(): grp=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) lab=['A','A','B','B'] return grp,lab def Classify(inX,dataset,lab,k): # 用於分類的向量inX;數據集dataset;屬性向量lab;k近鄰 datasize=dataset.shape[0]# 行大小 difmt=tile(inX,(datasize,1))-dataset # tile: 將inX復制成一個 行大小為datasize,列大小為1的矩陣 ######------ 計算歐幾里得距離 ------####### sqrdif=difmt ** 2 sqrdist=sqrdif.sum(axis=1) distance=sqrdist** 0.5 ########################################## sortedDisIndex=distance.argsort() # 排序后獲得索引值 classcnt={} for i in range(k):# 取前k個 vtlab=lab[sortedDisIndex[i]] classcnt[vtlab]=classcnt.get(vtlab,0)+1 sortedClasscnt=sorted(classcnt.items(),key=operator.itemgetter(1),reverse=True) # sorted:itemgetter(1)按照第二關鍵字排序,即按照個數從大到小排序(因為reverse=True) return sortedClasscnt[0][0] grp,lab=init() ans=Classify([0,0],grp,lab,3) print(ans)