我正在尝试从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
答案 0 :(得分:0)
这种情况正在发生,因为您正在使用Python 3,其中Applicative ZipList
返回生成器而不是列表。
您需要使用map
或fltLine = list(map(float, curLine))
来确保结果是一个列表,然后事情会按预期运行。
由于我假设你在这里使用numpy,你可以使用fltLine = [float(x) for x in curLine]
函数来加载你的数据文件:
genfromtxt