这里,以K-Means聚类为例,计算两个个体之间的距离
话不多说,上代码:
import numpy as np
##load data set
def loadDataSet(fileName):
DataMat = []
fr = open(fileName)
for line in fr.readlines():
curline = line.strip().split('\t')
curfloat = list(map(float,curline))
DataMat.append(curfloat)
return DataMat
##distance
## 第一种:
def distEclud_1(vecA,vecB):
return np.sqrt(sum(np.power(vecA-vecB,2)))
##第二种:
def distEclud_2(vecA,vecB):
return np.sqrt(np.sum(np.power(vecA-vecB,2))) #计算两个向量之间的欧氏距离
DataSet = np.mat(loadDataSet('D:/算法代码/K-均值聚类/testSet.txt'))
print(distEclud_1(DataSet[0],DataSet[1]))
数据集的形式:
按第一种写法,结果如下:
计算的结果为数组的形式,而不是一个数值
按第二种写法,结果如下:
这里,可以很清楚的看到,结果为一个数值
那么问题来了,为什么会出现这种情况呢?
here
return np.sqrt(sum(np.power(vecA-vecB,2)))
return np.sqrt(np.sum(np.power(vecA-vecB,2)))
原因:
- python中自带的sum只能处理一维列表,对于二维及以上的数组,不能得出正确的结果。一般的,用的比较多的,如矩阵,sum(A),就是对A的每一列求和。
- numpy中的sum则可以求出矩阵或数组所有元素的和