關於sum的坑

這裏,以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\to
return np.sqrt(sum(np.power(vecA-vecB,2)))
return np.sqrt(np.sum(np.power(vecA-vecB,2)))
原因:

  • python中自帶的sum只能處理一維列表,對於二維及以上的數組,不能得出正確的結果。一般的,用的比較多的,如矩陣An×mA_{n\times m},sum(A),就是對A的每一列求和。
  • numpy中的sum則可以求出矩陣或數組所有元素的和
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章