15
Сен
2021

Как правильно транспонировать матрицу

Как правильно сделать функцию из моего кода и чтобы она работала полностью? Код написал, но он не работает с некоторыми входными данными. А именно при нулях (строка = 0, колонка = 0) и при очень больших матрицах(в тестах валится на 950x764 матрице). Функцию, которую пытался написать и код - ниже. Помогите пожалуйста довести до ума.

Условие: Есть матрица размера m × n. Нужно написать функцию, которая её транспонирует. Транспонированная матрица получается из исходной заменой строк на столбцы.

Формат ввода: В первой строке задано число n — количество строк матрицы. Во второй строке задано m — число столбцов, m и n не превосходят 1000. В следующих n строках задана матрица. Числа в ней не превосходят по модулю 1000.

Формат вывода: Напечатайте транспонированную матрицу в том же формате, который задан во входных данных. Каждая строка матрицы выводится на отдельной строке, элементы разделяются пробелами.

Пример вводы/вывода:

Ввод

4

3

1 2 3

0 2 6

7 4 1

2 7 0

Вывод

1 0 7 2

2 2 4 7

3 6 1 0

Просто код:

rows = int(input().strip())
colums = int(input().strip())
a = [[0]*colums for _ in range(rows)]
for i in range(rows):
    a[i] = [int(j) for j in input().strip().split(" ")]
rows_count = len(a)
colums_count = len(a[0])
new_matrix = [[0] * rows_count for _ in range(colums_count)]
for i in range(rows_count):
    for j in range(colums_count):
        new_matrix[j][i] = a[i][j]
for row in new_matrix:
    print(*row)

Пытался создать функцию из кода выше, но безуспешно. Много ошибок:

def transpose(rows, colums):

    rows_count = len(a)
    colums_count = len(a[0])
    new_matrix = [[0] * rows_count for _ in range(colums_count)]
    for i in range(rows_count):
        for j in range(colums_count):
            new_matrix[j][i] = a[i][j]
    for row in new_matrix:
        print(*row)


if __name__ == '__main__':
    rows = int(input().strip())
    colums = int(input().strip())
    a = [[0] * colums for _ in range(rows)]
    for i in range(rows):
        a[i] = [int(j) for j in input().strip().split(" ")]
    print(transpose(rows, colums))

Источник: https://ru.stackoverflow.com/questions/1328562/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%83

15
Сен
2021

Как правильно транспонировать матрицу

Как правильно сделать функцию из моего кода и чтобы она работала полностью? Код написал, но он не работает с некоторыми входными данными. А именно при нулях (строка = 0, колонка = 0) и при очень больших матрицах(в тестах валится на 950x764 матрице). Функцию, которую пытался написать и код - ниже. Помогите пожалуйста довести до ума.

Условие: Есть матрица размера m × n. Нужно написать функцию, которая её транспонирует. Транспонированная матрица получается из исходной заменой строк на столбцы.

Формат ввода: В первой строке задано число n — количество строк матрицы. Во второй строке задано m — число столбцов, m и n не превосходят 1000. В следующих n строках задана матрица. Числа в ней не превосходят по модулю 1000.

Формат вывода: Напечатайте транспонированную матрицу в том же формате, который задан во входных данных. Каждая строка матрицы выводится на отдельной строке, элементы разделяются пробелами.

Пример вводы/вывода:

Ввод

4

3

1 2 3

0 2 6

7 4 1

2 7 0

Вывод

1 0 7 2

2 2 4 7

3 6 1 0

Просто код:

rows = int(input().strip())
colums = int(input().strip())
a = [[0]*colums for _ in range(rows)]
for i in range(rows):
    a[i] = [int(j) for j in input().strip().split(" ")]
rows_count = len(a)
colums_count = len(a[0])
new_matrix = [[0] * rows_count for _ in range(colums_count)]
for i in range(rows_count):
    for j in range(colums_count):
        new_matrix[j][i] = a[i][j]
for row in new_matrix:
    print(*row)

Пытался создать функцию из кода выше, но безуспешно. Много ошибок:

def transpose(rows, colums):

    rows_count = len(a)
    colums_count = len(a[0])
    new_matrix = [[0] * rows_count for _ in range(colums_count)]
    for i in range(rows_count):
        for j in range(colums_count):
            new_matrix[j][i] = a[i][j]
    for row in new_matrix:
        print(*row)


if __name__ == '__main__':
    rows = int(input().strip())
    colums = int(input().strip())
    a = [[0] * colums for _ in range(rows)]
    for i in range(rows):
        a[i] = [int(j) for j in input().strip().split(" ")]
    print(transpose(rows, colums))

Источник: https://ru.stackoverflow.com/questions/1328562/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%83

Тебе может это понравится...

Добавить комментарий