1、数据提取

def loadData(filePath):

  myData=[]

  file=open(filePath)

  for line in file.readlines()[1:]:

    oldLine=line.strip().split('\t')  

    myLine=list(map(float,oldLine[1:]))

    myData.append(myLine)

  return myData

此函数用于将txt文档中数据读取到变矩阵myData中,注意原始文档中首行为标题行,首列为用户名,均非数据,故未读入矩阵中。

 对以上语句中部分函数说明如下:

file.readlines()将文件中内容按行一行一行依次读入内存,避免一次性读入数据量过大造成内存不足。

原始文件中每一行以'\n'结尾,通过strip()函数将此符号去除,并以制表符将一个字符串分成多条。

原始每行各条数据是字符串格式,需要通过float函数将其转化为浮点型数据。

将每一行处理后结果添加到数据矩阵中矩阵,最后该矩阵作为函数返回赋予指定变量(若不赋予变量无法调取myData矩阵)。

2、距离函数

 

def distance(vector1,vector2,type=1):
  if len(vector1)!=len(vector2):
    return '两个向量维度不同,请检查输入。'
  if type==1:
    return sqrt(sum(power(vector1-vector2,2))) #Euclid距离
  elif type==2:
    return sum(abs(vector1-vector2))/len(vector1) #Manhattan距离
  elif type==3:
    return "" #Chebyshev距离
  else :
    return "当前仅支持1:Euclid,2:Manhattan,3:Chebyshev三种距离模式。"