输入文件到多个矩阵

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]]]