实验数据加载时程序报错


def loadDatasEst(filename):
    dataMat = []
    fr = open(filename,encoding="utf-8")
    for line in fr.readlines():
        curLine = line.strip().split()
        fltLine = list(map(float, curLine) ) # map() 会根据提供的函数对指定序列做映射
        dataMat.append(fltLine)
    return dataMat

数据:0.5488135039273248 0.6778165367962301 6.162159117869631
0.7151893663724195 0.27000797319216485 2.4156764567146594
0.6027633760716439 0.7351940221225949 4.336791586416803
0.5448831829968969 0.9621885451174382 6.0077722298334475
0.4236547993389047 0.24875314351995803 2.016697664924199
0.6458941130666561 0.5761573344178369 6.748001065106139
0.4375872112626925 0.592041931271839 5.222392097073034
0.8917730007820798 0.5722519057908734 5.624129772685797
报错fltLine = list(map(float, curLine) ) # map() 会根据提供的函数对指定序列做映射
ValueError: could not convert string to float: '进程已结束,退出代码0'

你把保存发给我一下

字符串不能直接转为浮点数,你自己在网上找找这类转化的函数吧。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    根据报错信息可以看出,在加载实验数据的时候出现了类型转换错误。具体来说,"进程已结束,退出代码0" 这个字符串无法被转换为浮点数,导致了报错。

    为了解决这个问题,你可以按照以下步骤来修改代码:

    1. 打开你的数据文件,并检查该文件的内容是否符合预期。确认文件中只包含数据,不包含任何其他非数字的内容。

    2. 如果在文件中发现了任何不是数字的内容,你需要将其删除或者用一个有效的数字进行替换。

    3. loadDatasEst() 函数中,对读取的每一行进行切割,可以使用 split() 方法,默认情况下以空格进行分割。

    4. 在将切割后的字符串列表转换为浮点数列表时,可以使用 try-except 块来处理转换错误。如果出现类型转换错误,可以跳过当前行并继续处理下一行。

    5. 修改 loadDatasEst() 函数的实现,添加异常处理代码,并将转换后的浮点数列表添加到 dataMat 中。

    下面是修改后的代码示例:

    def loadDatasEst(filename):
        dataMat = []
        fr = open(filename, encoding="utf-8")
        for line in fr.readlines():
            try:
                curLine = line.strip().split()
                fltLine = list(map(float, curLine))
                dataMat.append(fltLine)
            except ValueError:
                continue
        return dataMat
    

    通过以上的修改,在加载数据时,如果遇到类型转换错误,程序将跳过当前行并继续处理下一行。这样可以避免程序因为出现类型转换错误而中断,并且可以加载其他正确格式的数据。这种方法可以帮助你定位出现类型转换错误的数据行。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^