python
为什么循环读取行然后进行添加数据的操作没起作用from numpy import *
# 导入运算符模块
import matplotlib as mpl
import matplotlib.pyplot as plt
def file2matrix(filename):
'''将待处理的数据格式转换成分类器可以接受的格式
将文本记录转换为Numpy的解析程序
该函数输入为文本字符串,输出为训练样本矩阵和类标签向量'''
fr = open(filename)
# 得到文件行数
numberOfLines = len(fr.readlines())# get the number of lines in the file
# 创建(行数,特征数)以零填充的矩阵Numpy
returnMat = zeros((numberOfLines, 3))# prepare matrix to return
# 创建一个列表存放标签值
classLabelVector = []# prepare labels return
# 解析文件数据到列表
index = 0
for line in fr.readlines():
# strip截取掉所有回车字符
line = line.strip()
# 将整行数据以’\t'为分隔符分割成一个元素列表
listFromLine = line.split('\t')
returnMat = listFromLine
# 列表中存储的元素值为整型,否则python语言会将这些元素当做字符串处理
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat, classLabelVector
if __name__ == '__main__':
datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')
print(datingDataMat)
print(datingLabels)
#分析数据-使用mpl创建散点图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:, 1], datingDataMat[:, 2])
plt.show()
你前面 readlines 读取全部文件内容了,此时文件指针已经到末尾了
你需要 seek(0) 移动下文件指针,参考代码:
from numpy import *
# 导入运算符模块
import matplotlib as mpl
import matplotlib.pyplot as plt
def file2matrix(filename):
'''将待处理的数据格式转换成分类器可以接受的格式
将文本记录转换为Numpy的解析程序
该函数输入为文本字符串,输出为训练样本矩阵和类标签向量'''
fr = open(filename)
# 得到文件行数
numberOfLines = len(fr.readlines())# get the number of lines in the file
# 创建(行数,特征数)以零填充的矩阵Numpy
returnMat = zeros((numberOfLines, 3))# prepare matrix to return
# 创建一个列表存放标签值
classLabelVector = []# prepare labels return
# 解析文件数据到列表
index = 0
fr.seek(0)
for line in fr.readlines():
# strip截取掉所有回车字符
line = line.strip()
# 将整行数据以’\t'为分隔符分割成一个元素列表
listFromLine = line.split('\t')
returnMat = listFromLine
# 列表中存储的元素值为整型,否则python语言会将这些元素当做字符串处理
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat, classLabelVector
if __name__ == '__main__':
datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')
print(datingDataMat)
print(datingLabels)
#分析数据-使用mpl创建散点图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:, 1], datingDataMat[:, 2])
plt.show()
页:
[1]