from numpy import * #调用numpy模块
import operator #调用operator模块
from os import listdir #调用os模块
def classify0(inX, dataSet, labels, k):#定义一个有四个参数的函数,四个参数分别是,“用于输入的样本向量”,“数据集”,“标签向量”,“K的大小”
dataSetSize= dataSet.shape[0] #读取数据集的行数,其中shape[0]是读取数据的行数
diffMat =tile(inX, (dataSetSize,1)) – dataset#计算输入的样本向量的每个属性与样本集中的每个样本的每个属性的差值。tile(A,reps)函数,是将数组A在维度上进行重复,reps是各个维度的重复次数。这里tile(inX, (dataSetSize,1))就是将inX在行维度上不重复,在列维度上重复dataSetSize次。然后减去dataset即得到差值。
sqDiffMat =diffMat**2#将刚刚得到的差值的每个分量进行平方运算,diffMat**2是将diffMat里面的每个元素都进行平方运算。
sqDistances= sqDiffMat.sum(axis=1)#这一步是将上一步平方完后的式子进行按行相加。即得到sqDistances的分量就是用于输入的样本向量与数据集每个样本的欧氏距离的平方。其中.sum(axis=0或者1),axis=0代表按列相加 axis=0代表按行相加。
distances =sqDistances**0.5 #这一步将欧氏距离的平方进行开方处理,得到distances的分量就是用于输入的样本向量与数据集每个样本的欧氏距离。distances是一个列向量。
sortedDistIndicies = distances.argsort()