在python2.7下正常
在python3.7和python2.7下print了加载完的数据集dataMat中的一条数据,得到了不同的结果:
python3.7:
(ludwig.py37) e:\test\kmeans>python km.py
python2.7:
(ocr.py27) e:\test\kmeans>python km0.py
[1.658985, 4.285136]
3.7返回的是map对象;2.7返回的是list对象;
感觉是map()函数在python版本下的差异导致,验证一下:
python3.7:
(ludwig.py37) e:\test\kmeans>python
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD6
4)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> map
python2.7:
(ocr.py27) e:\test\kmeans>python
Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> map
印证猜测:
python2下map是一个build-in function; python3下map是一个class,map()返回的是一个map class对象;
修改代码将map返回的结果强制转一下list即可支持python2, python3:
# 加载数据
def loadDataSet(fileName): # 解析文件,按tab分割字段,得到一个浮点数字类型的矩阵
dataMat = [] # 文件的最后一个字段是类别标签
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float, curLine) # 将每个元素转成float类型
fltLine = list(fltLine) #!!!!python3中 map返回的不是list是map类,形如
dataMat.append(fltLine)
return dataMat
python2.7, python3.7下都可通过.