如果我有一个文本文件,其中每一行是矩阵中的一行,并且每个矩阵用新行分隔,例如
1234
1234
2345
2345
我如何创建这些矩阵的数组(不使用numpy)。
对于1个矩阵我做:
with open("matrix.txt", "r") as file:
matrix=[line.split() for line in file]
为我试过的多个矩阵推断这段代码:
x=0
matrix=[]
with open("matrix.txt", "r") as file:
for line in file:
if line == "\n":
x+=1
else:
matrix[x].append([line.split()])
print(matrix)
如果文本文件中的行被添加到像之前的矩阵中,但如果它遇到换行符,它会将下一行附加到3d数组的下一个索引,所以我最终会得到一个数组数组。
我列出的代码给了我以及我知道应该发生的索引错误,因为当我用x增加矩阵索引时它实际上并不存在,因为我从未创建它。
我被困住了,可以帮忙。请问您是否需要我澄清某些内容,或者我是否已经解释得不够好。谢谢!
编辑:输出看起来像[[[1,2,3,4],[1,2,3,4]],[[2,3,4,5],[2,3,4] ,5]]]
因此矩阵[0] [1] [2]将访问第一个矩阵并检索3。
答案 0 :(得分:1)
好的,试试这个::
x=0
matrix=[]
row = []
with open("matrix.txt", "r") as file:
for line in file:
line = line.strip("\n")
if line == "":
matrix.append(row)
row = []
else:
row.append([int(x) for x in list(line)])
if (len(row) > 0):
matrix.append(row)
print(matrix)
结果:[[[1,2,3,4],[1,2,3,4]],[[2,3,4,5],[2,3,4,5]]]
答案 1 :(得分:0)
只需检查列表的长度,并在必要时添加项目:
编辑:由于您的工作方法没有拆分成单独的整数,因此扩展版本会很奇怪。已更新至已修改的问题
content = "1234\n1234\n\n2345\n2345"
x=0
matrixes = []
for line in content.split('\n'):
if line is "":
x+=1
else:
if len(matrixes) <= x:
matrixes.append([[int(x) for x in list(line)]])
else:
matrixes[x].append([int(x) for x in list(line)])
print(matrixes[0][0][0])
会产生:1
(链接到更新的示例:https://repl.it/EDtz/0)