莫待无花空折枝 发表于 2020-8-21 22:10:01

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()

Twilight6 发表于 2020-8-21 22:10:02



你前面 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]
查看完整版本: python