输入文件到多个矩阵
Input file to multiple matrices
我知道有相关话题,但我已经搜索过,其中 none 帮助我解决了我的问题。
我有一个包含方阵的输入文本文件,如下所示:
1 2 3
4 5 6
7 8 9
*
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
25 26 27 28 29
30 31 32 33 34
现在后面可以有更多的矩阵,它们之间都有一个 *
。
我想分离矩阵 (不使用 numpy!) 然后使用列表中的列表来处理它们(我猜列表理解可能很有用),所有条目将是整数。第一个矩阵将如下所示 [[1,2,3],[4,5,6],[7,8,9]]
,第二个矩阵将是 [[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29],[31,31,32,33,34]]
,依此类推。
我的计划是在它们自己的列表条目中分离矩阵,然后(利用矩阵是正方形的事实,因此可以很容易地确定一个列表条目应该包含多少个整数)使用一些列表理解来将字符串更改为整数。但是我卡在了最开始。
matrix = open('input.txt','r').read()
matrix = matrix.replace('\n',' ')
list = matrix.split('* ')
现在如果我 print list
我得到 ['1 2 3 4 5 6 7 8 9', '10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34']
问题是我现在只能使用两个字符串而不是整数列表。
有什么建议吗?
现在您有了字符串,在 space 上拆分每个字符串并将每个小字符串转换为整数。之后,您可以将每个字符串列表转换为正方形 "matrix"(列表列表)。
补充一点:不要使用list
作为变量名。这与内置 list
类型冲突。在此代码中,我使用了名称 mylist
.
newlist = [[int(nstr) for nstr in v.split()] for v in mylist]
# Now convert each list of strings to a square "matrix" (list of lists)
但是,请注意@Selcuk 在他的评论中给出的方法是解决您的整体问题的更好方法。虽然将整个文件读入内存并按星星拆分会更容易一些,然后将每一行拆分为整数。这会导致代码更简单,但内存使用量更大。
mat_list = [[[int(num_str) for num_str in line.split()] for line in inner_mat.split('\n')] for inner_mat in open('input_mat.txt','r').read().split('\n*\n')]
[[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12, 13, 14], [15, 16, 17、18、19]、[20、21、22、23、24]、[25、26、27、28、29]、[30、31、32、33、34]]]
我知道有相关话题,但我已经搜索过,其中 none 帮助我解决了我的问题。
我有一个包含方阵的输入文本文件,如下所示:
1 2 3
4 5 6
7 8 9
*
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
25 26 27 28 29
30 31 32 33 34
现在后面可以有更多的矩阵,它们之间都有一个 *
。
我想分离矩阵 (不使用 numpy!) 然后使用列表中的列表来处理它们(我猜列表理解可能很有用),所有条目将是整数。第一个矩阵将如下所示 [[1,2,3],[4,5,6],[7,8,9]]
,第二个矩阵将是 [[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29],[31,31,32,33,34]]
,依此类推。
我的计划是在它们自己的列表条目中分离矩阵,然后(利用矩阵是正方形的事实,因此可以很容易地确定一个列表条目应该包含多少个整数)使用一些列表理解来将字符串更改为整数。但是我卡在了最开始。
matrix = open('input.txt','r').read()
matrix = matrix.replace('\n',' ')
list = matrix.split('* ')
现在如果我 print list
我得到 ['1 2 3 4 5 6 7 8 9', '10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34']
问题是我现在只能使用两个字符串而不是整数列表。
有什么建议吗?
现在您有了字符串,在 space 上拆分每个字符串并将每个小字符串转换为整数。之后,您可以将每个字符串列表转换为正方形 "matrix"(列表列表)。
补充一点:不要使用list
作为变量名。这与内置 list
类型冲突。在此代码中,我使用了名称 mylist
.
newlist = [[int(nstr) for nstr in v.split()] for v in mylist]
# Now convert each list of strings to a square "matrix" (list of lists)
但是,请注意@Selcuk 在他的评论中给出的方法是解决您的整体问题的更好方法。虽然将整个文件读入内存并按星星拆分会更容易一些,然后将每一行拆分为整数。这会导致代码更简单,但内存使用量更大。
mat_list = [[[int(num_str) for num_str in line.split()] for line in inner_mat.split('\n')] for inner_mat in open('input_mat.txt','r').read().split('\n*\n')]
[[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12, 13, 14], [15, 16, 17、18、19]、[20、21、22、23、24]、[25、26、27、28、29]、[30、31、32、33、34]]]