from numpy import *
import operator
group = array([[4.0,4.1],[1.0,4.0],[0,0.0],[0,0.1]])
labels = ["A","A","B","B"]
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]#读取样本数组行数
#使用tile函数,复制测试数组元素按样本数组行列形式,并进行数组的减法
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2#相减的值求平方
sqDistances = sqDiffMat.sum(axis=1)#按行累加求平方和
distances = sqDistances**0.5#对平方和求根
sortedDistIndicies = distances.argsort()#通过argsort函数返回从小到大的距离数组的索引值数组
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]#由索引值循环读取分类标志
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
#返回关键字voteIlabel的值,并将值加1,如果关键字voteIlabel不存在,则返回0
'''sorted(iterable,cmp,key,reverse)
iterable:是可迭代类型 cmp:用于比较的函数
key:用列表元素的某个属性或函数作为关键字,有默认值,迭代集合中的一项'''
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
#classCount.items()是字典中元组形式的键值对
#使用键值对中的第二个项即键值中的值进行降序排序,reverse = true为降序,reverse = false为升序,
#默认为升序,sorted可以返回副本元组,赋值给sortedClassCount
print(sortedClassCount[0][0])#打印列表中最大元素的类别
print(sortedClassCount)
classify0([1,1],group,labels,3)