关于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]))

数据集的形式:
关于sum的坑_第1张图片
按第一种写法,结果如下:
关于sum的坑_第2张图片
计算的结果为数组的形式,而不是一个数值
按第二种写法,结果如下:
在这里插入图片描述
这里,可以很清楚的看到,结果为一个数值
那么问题来了,为什么会出现这种情况呢?
here → \to
return np.sqrt(sum(np.power(vecA-vecB,2)))
return np.sqrt(np.sum(np.power(vecA-vecB,2)))
原因:

  • python中自带的sum只能处理一维列表,对于二维及以上的数组,不能得出正确的结果。一般的,用的比较多的,如矩阵 A n × m A_{n\times m} An×m,sum(A),就是对A的每一列求和。
  • numpy中的sum则可以求出矩阵或数组所有元素的和

你可能感兴趣的:(numpy)