Транспонирование матрицы
В этом примере посмотрим, как транспонировать матрицу на Python. Транспонирование — это операция, при которой строки и столбцы меняются местами.
Что нужно знать
Перед изучением примера полезно понимать:
Python: цикл for — цикл for
Python: список (list) — списки
Как устроена матрица
В Python матрицу удобно представлять как вложенный список — список списков. Каждый внутренний список будет одной строкой матрицы.
Например, запись X = [[1, 2], [4, 5], [3, 6]] соответствует матрице размером 3×2. Первую строку можно получить как X[0], а элемент на пересечении первой строки и первого столбца — как X[0][0].
Транспонированная матрица обозначается как X“. Элемент, стоявший в i-й строке и j-м столбце исходной матрицы, в транспонированной окажется в j-й строке и i-м столбце. То есть из матрицы 3×2 получается матрица 2×3.
Покажем два способа сделать это в Python.
Пример 1. Через вложенный цикл
# Program to transpose a matrix using a nested loop
X = [[12,7],
[4 ,5],
[3 ,8]]
result = [[0,0,0],
[0,0,0]]
# iterate through rows
for i in range(len(X)):
# iterate through columns
for j in range(len(X[0])):
result[j][i] = X[i][j]
for r in result:
print(r)
Вывод
[12, 4, 3]
[7, 5, 8]
Внешний цикл идёт по строкам исходной матрицы, внутренний — по столбцам. На каждой итерации элемент X[i][j] записывается в result[j][i] — то есть индексы меняются местами. В итоге получаем транспонированную матрицу.
Пример 2. Через list comprehension
''' Program to transpose a matrix using list comprehension'''
X = [[12,7],
[4 ,5],
[3 ,8]]
result = [[X[j][i] for j in range(len(X))] for i in range(len(X[0]))]
for r in result:
print(r)
Результат работы этой программы будет таким же, как в первом примере. Здесь та же логика реализована короче — с помощью вложенного list comprehension, который создаёт сразу всю транспонированную матрицу одним выражением.