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三种距离模式。"