Python矩阵在k-means中使用min函数

时间:2015-07-16 20:32:14

标签: python matrix

我正在尝试从Book"机器学习在行动中学习k-means"现在。 在ipython notebook中使用本书给出的代码,结果

matrix([[<map object at 0x0000000008832C88>]], dtype=object)
输入locMat = mat(loadDataSet("user1.txt"))min(locMat[:,0])后发生了

那个结果意味着什么?为什么不是像3.245555这样的确切值?代码如下所示,谢谢高级!

def loadDataSet(fileName):     
    dataMat = []             
    fr = open(fileName)
    for line in fr.readlines():
    curLine = line.strip().split('\t')
    fltLine = map(float,curLine) #map all elements to float()
    dataMat.append(fltLine)
    return dataMat

def distEclud(vecA, vecB):
    return sqrt(sum(power(vecA - vecB, 2))) #la.norm(vecA-vecB)

def randCent(dataSet, k):
    n = shape(dataSet)[1]
    centroids = mat(zeros((k,n)))
    for j in range(n):
        minJ = min(dataSet[:,j]) 
        rangeJ = float(max(dataSet[:,j]) - minJ)
        centroids[:,j] = mat(minJ + rangeJ * random.rand(k,1))
    return centroids

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您正在使用Python 3,其中Applicative ZipList返回生成器而不是列表。

您需要使用mapfltLine = list(map(float, curLine))来确保结果是一个列表,然后事情会按预期运行。

由于我假设你在这里使用numpy,你可以使用fltLine = [float(x) for x in curLine]函数来加载你的数据文件:

genfromtxt