Транспонирование матрицы

В этом примере посмотрим, как транспонировать матрицу на Python. Транспонирование — это операция, при которой строки и столбцы меняются местами.

Что нужно знать

Перед изучением примера полезно понимать:

Как устроена матрица

В 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, который создаёт сразу всю транспонированную матрицу одним выражением.