折腾了大半天,终于搞懂了txt文件中的数据转换成矩阵的过程,这个问题网上的完整解释不太多,自己搞出来了一个成功的版本。
完整代码如下:
(为啥我的代码不是彩色的啊!丑丑的)
from numpy import *
file = open("/Users/zhaoyueqing/Desktop/train_linear.txt")
filelist = file.readlines()
lenghth = len(filelist)
to_mat= zeros((lenghth,2)) #这里2指想要转化成矩阵是2列的,数据是几列就初始化成几。
index = 0
file = open("/Users/zhaoyueqing/Desktop/train_linear.txt")
for data in file.readlines():
data = data.strip('\n')
nums = data.split(" ")
nums = [float(x) for x in nums]
to_mat[index,:] = nums[:]
index +=1
print(to_mat)
print(type(to_mat))
to_mat = matrix(to_mat)
print(to_mat)
print(type(to_mat))
分步解释代码:
首先,打开文件
file = open("/Users/zhaoyueqing/Desktop/train_linear.txt")
然后,读取文件的每一行,将每一行储存成列表的形式。
filelist = file.readlines()
具体是酱紫的:
获取数据的行数,也就是文件列表中值的个数,因为一行是列表中的一个元素:
lenghth = len(filelist)
首先,初始化一个全0矩阵:
to_mat= zeros((lenghth,2))
长这样!
下面为啥我又打开了一次文件呢?因为我不会啊!!没想到吧!!T^T
我运行过程中发现运行到上一步的时候文件已经自动关闭了,我没找到怎么解决的办法,所以只能重新打开一次,如果有人明白这里希望指点一下。
file = open("/Users/zhaoyueqing/Desktop/train_linear.txt")
重点来了,下面是一个循环,具体意思是把列表里的空格和换行符都去掉,然后转换成数字的形式,将列表中的数据一行一行的替换掉刚刚建立的全0矩阵。
for data in file.readlines():
data = data.strip('\n')
nums = data.split(" ") #这里原文件中两个数据间有多少个空格就打多少个,不然会出错
nums = [float(x) for x in nums]
to_mat[index,:] = nums[:]
index +=1
这段可以在每一步都测试一下结果,print出来比较容易看懂。
最后打印,转换之后的是数组的形式,可以直接用matrix函数转化成矩阵。
print(to_mat)
print(type(to_mat))
to_mat = matrix(to_mat)
print(to_mat)
print(type(to_mat))
结果: