這裏,以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則可以求出矩陣或數組所有元素的和