Входной файл в несколько матриц - PullRequest
0 голосов
/ 21 января 2019

Я знаю, что есть связанные темы, но я искал, и ни одна из них не помогла мне с моей проблемой.

У меня есть входной текстовый файл с квадратными матрицами, который выглядит следующим образом:

1 2 34 5 67 8 9*10 11 12 13 1415 16 17 18 1920 21 22 23 2425 26 27 28 2930 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']

Проблема в том, что я застрял с двумя строками вместосписок целых чисел.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 21 января 2019
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]]]

0 голосов
/ 21 января 2019

Теперь, когда у вас есть строки, разбейте каждую строку на пробел и преобразуйте каждую небольшую строку в целое число.После этого вы можете преобразовать каждый список строк в квадратную «матрицу» (список списков).

Дополнительный пункт: не используйте 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 в его комментарии, является лучшим способом решения вашей общей проблемы.Хотя было бы немного проще прочитать весь файл в памяти и разбить на звезды, а затем разбить каждую строку на целые числа.Это приведет к упрощению кода, но к увеличению использования памяти.

...