Как создать массив матриц, считанных из текстового файла

#python #arrays #python-3.x #matrix

#python #массивы #python-3.x #матрица

Вопрос:

Если у меня есть текстовый файл, где каждая строка является строкой в матрице, и каждая матрица разделена новой строкой, например

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-массива, так что в итоге я получаю массив массивов.

Приведенный мной код выдает ошибку and out of index, которая, как я знаю, должна произойти, потому что, когда я увеличиваю индекс матрицы на x, он на самом деле не существует, поскольку я его никогда не создавал.

Я застрял, и мне не помешала бы некоторая помощь. Пожалуйста, спросите, нужно ли вам, чтобы я что-то разъяснил, или я что-то недостаточно хорошо объяснил. Спасибо!

Редактировать: Вывод будет выглядеть примерно так [[[1,2,3,4], [1,2,3,4]], [[2,3,4,5],[2,3,4,5]]]

Таким образом, matrix [0][1][2] будет обращаться к первой матрице и извлекать 3.

Ответ №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. это не совсем то, что я ищу. Я виноват в том, что недостаточно хорошо это объясняю. Я отредактировал свой исходный пост, указав, каким будет ожидаемый результат.

Ответ №2:

Просто проверьте длину вашего списка и добавьте элемент, если необходимо:

РЕДАКТИРОВАТЬ: поскольку ваш рабочий метод не разделялся на отдельные целые числа, было бы странно, если бы расширенная версия. Обновлено до отредактированного вопроса

 content = "1234n1234nn2345n2345"

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 )

Комментарии:

1. это не совсем то, что я ищу. Я виноват в том, что недостаточно хорошо это объясняю. Я отредактировал свой исходный пост, указав, каким будет ожидаемый результат.

2. Извините, что это была моя вина за то, что я недостаточно хорошо это объяснил.