【发布时间】:2014-01-24 08:24:21
【问题描述】:
注意:我为我的数据使用了错误的源文件 - 一旦修复,我的问题就解决了。事实证明,没有简单的方法可以在不是整数文字的字符串上使用 int(..)。
这是《机器学习实战》一书中的一个例子,我不太清楚哪里出了问题。这里有一些背景:
from numpy import as *
def file2matrix(filename):
fr = open(filename)
numberOfLines = len(fr.readlines())
returnMat = zeros((numberOfLines,3))
classLabelVector = []
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1])) # Problem here.
index += 1
return returnMat,classLabelVector
.txt文件如下:
40920 8.326976 0.953952 largeDoses
14488 7.153469 1.673904 smallDoses
26052 1.441871 0.805124 didntLike
75136 13.147394 0.428964 didntLike
38344 1.669788 0.134296 didntLike
...
我在classLabelVector.append(int(listFromLine[-1])) 行出现错误,因为我相信int(..) 正试图解析一个不是文字整数的字符串(即"largeDoses")。我错过了什么吗?
我查阅了 int() 的文档,但它似乎只解析数字和整数文字:
http://docs.python.org/2/library/functions.html#int
此外,本书的摘录对此部分的解释如下:
最后,您循环遍历文件中的所有行,并使用 line.strip() 去除返回行字符。接下来,你分割线 进入由制表符分隔的元素列表:'\t'。你拿 前三个元素并将它们推到矩阵的一行中,并且 你使用负索引的 Python 特性来获取最后一项 从列表中放入 classLabelVector。你必须明确 告诉解释器你想要最后一个的整数版本 列表中的项目,否则它将为您提供字符串版本。通常, 您必须这样做,但 NumPy 会为您处理这些细节。
【问题讨论】: