在机器学习实战第2章中,一个示例从文件中读取记录,每一行如下:
124 110 223 largeDoses
(忘了它的实际含义)
kNN.py
中的一个函数是:
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]))
index += 1
return returnMat,classLabelVector
问题是listFromLine[-1]
是一个字符串('largeDoses'
等),如何转换成int
?
在书中,它说 numpy
可以处理这个。
(摘自本书:你必须明确地告诉解释器你想要列表中最后一项的整数版本,否则它会给你字符串版本。通常,你必须执行此操作,但 NumPy 会为您处理这些细节。) 然而,
ValueError: invalid literal for int() with base 10: 'largeDoses'
发生在
import kNN
kNN.file2matrix('dataset.txt')
顺便说一句,这本书的中文版和英文版不一样。
最佳答案
String(确实)无法转换为int,无论是在python中还是在其他环境中,
但是,
解决办法是
将机器学习(确实)付诸实践
如果所有 kNN
输入训练/交叉验证记录(也称为观察、示例)
遵守 [ 3x FEATURE, 1x LABEL]
的约定
使用:
classLabelVector.append( listFromLine[-1] ) # to .append a LABEL, not an int()
关于python - 字符串如何在python中转换为int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26302745/