Гид по технологиям

Транспонирование матриц: примеры на C++, Python, JavaScript и C

4 min read Алгоритмы Обновлено 04 Jan 2026
Транспонирование матриц на C++, Python, JavaScript и C
Транспонирование матриц на C++, Python, JavaScript и C

Ноутбук с отображением матрицы

Условие задачи

Дана матрица mat[][]. Требуется найти и вывести её транспонированную матрицу.

Пример:

Иллюстрация транспонирования матрицы

Короткая интуиция

Транспонирование меняет порядок матрицы: строки исходной становятся столбцами результата и наоборот. Для элемента mat[i][j] транспонированная матрица содержит transpose[j][i].

Важно: для квадратной матрицы размер остаётся тем же; для прямоугольной m×n транспонированная будет n×m.

Как найти транспонированную матрицу (общая методика)

Шаги:

  1. Выделите матрицу результатов с размерами (cols × rows).
  2. Для каждой позиции i (0..cols-1) и j (0..rows-1) присвойте transpose[i][j] = mat[j][i].
  3. Выведите/верните результат.

Краткая методика (мини‑плейбук):

  • Проверить размеры исходной матрицы.
  • Если нужна память «в‑месте», оценить, квадратная ли матрица.
  • Применить двойной цикл с обменом индексов.

Транспонирование прямоугольной матрицы

Правила:

  • Порядок транспонированной матрицы обратен: m×n → n×m.
  • Каждая колонка исходной становится строкой результата: transpose[i][j] = mat[j][i].

C++ пример для прямоугольной матрицы

Ниже — оригинальная программа на C++ для транспонирования прямоугольной матрицы:

// C++ program to find the transpose of a rectangular Matrix  
#include   
using namespace std;  
  
// The order of the initial matrix is 3 x 4  
#define size1 3  
#define size2 4  
  
// Function to transpose a Matrix  
void transposeMatrix(int mat[][size2], int transposeMatrix[][size1])  
{  
 for (int i=0; i

Вывод программы:

Initial Matrix:  
4 2 8 2   
9 7 1 9   
0 2 7 5   
Transposed Matrix:  
4 9 0   
2 7 2   
8 1 7   
2 9 5

Python пример для прямоугольной матрицы

Оригинальная реализация на Python:

# Python program to find the transpose of a rectangular Matrix  
  
# The order of the initial matrix is 3 x 4  
size1 = 3  
size2 = 4  
  
# Function to transpose a Matrix  
def transposeMatrix(mat, transposedMatrix):  
for i in range(size2):  
for j in range(size1):  
            transposedMatrix[i][j] = mat[j][i]  
  
# Driver Code  
mat = [ [4, 2, 8, 2],  
        [9, 7, 1, 9],  
        [0, 2, 7, 5] ]  
  
print("Initial Matrix:")  
  
# Printing the initial Matrix  
for i in range(size1):  
for j in range(size2):  
        print(mat[i][j], end=' ')  
    print()  
  
# Variable to store the transposed Matrix  
# The dimensions of transposedMatrix are opposite to that of mat  
transposedMatrix = [[0 for x in range(size1)] for y in range(size2)]  
  
transposeMatrix(mat, transposedMatrix)  
  
print("Transposed Matrix:")  
  
# Printing the transposed Matrix  
for i in range(size2):  
for j in range(size1):  
        print(transposedMatrix[i][j], end=' ')  
    print()  

Вывод такой же, как в C++ примере выше.

JavaScript пример для прямоугольной матрицы

Оригинальный пример на JavaScript:

// JavaScript program to find the transpose of a rectangular Matrix  
  
// The order of the initial matrix is 3 x 4  
var size1 = 3  
var size2 = 4  
  
// Function to transpose a Matrix  
function transposeMatrix(mat, transposeMatrix) {  
 for (let i=0; i

C пример для прямоугольной матрицы

Оригинальный пример на C:

// C program to find the transpose of a rectangular Matrix  
#include   
  
// The order of the initial matrix is 3 x 4  
#define size1 3  
#define size2 4  
  
// Function to transpose a Matrix  
void transposeMatrix(int mat[][size2], int transposeMatrix[][size1])  
{  
 for (int i=0; i

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

Особенность:

  • Порядок остаётся тем же (n×n).
  • Для квадратной матрицы можно сделать ин‑плейс транспонирование, меняя элементы относительно главной диагонали: для всех i

C++ пример для квадратной матрицы

// C++ program to find the transpose of a square matrix  
#include   
using namespace std;  
  
// The order of the matrix is 3 x 3  
#define size 3  
  
// Function to transpose a Matrix  
void transposeMatrix(int mat[][size], int transposeMatrix[][size])  
{  
 for (int i=0; i

Другие реализации для Python, JavaScript и C для квадратной матрицы в статье выше используют ту же идею (transpose[i][j] = mat[j][i]).

Когда простое транспонирование не подходит

Контрпримеры / ограничения:

  • Ин‑плейс транспонирование возможно только для квадратных матриц простым обменом по диагонали. Для прямоугольных понадобится выделить новую память или сложная перестановка индексов.
  • Для больших матриц, хранящихся во внешней памяти (файлы, БД), необходимо учитывать расположение блоков (cache/IO), чтобы избежать многократных чтений/записей.
  • Транспонирование не меняет структуру значений (например, типы), но может требовать преобразования в стрим‑формате при сериализации.

Альтернативные подходы:

  • Использовать библиотечные функции (NumPy: mat.T) для оптимизированного выполнения и кеширования.
  • Для очень больших матриц применять блочное транспонирование: делить на подматрицы, транспонировать блоки и записывать.

Ментальные модели и эвристики

  • Представьте таблицу в Excel: транспонирование — это поворот таблицы через главную диагональ.
  • Для in‑place: меняем только элементы над диагональю (i
  • Для прямоугольной матрицы думайте о «повороте бумаги»: ширина становится высотой.

Фактбокс:

  • Транспонирование сохраняет ранг матрицы и след (trace) для квадратных матриц.
  • Детеминант транспонированной матрицы равен детерминанту исходной.

Проверочный список перед использованием в задаче или на интервью

Для разработчика:

  • Убедиться в корректных размерах: rows и cols.
  • Выбрать in‑place только для квадратной матрицы.
  • Проверить границы циклов (i от 0 до cols-1, j от 0 до rows-1 для результирующей).
  • Написать тесты: пустая матрица, матрица 1×1, прямоугольная 1×n и n×1, случайные.

Для интервьюируемого:

  • Объяснить сложность по времени O(n·m) и по памяти O(1) для in‑place (квадратные) или O(n·m) для выделения новой матрицы.
  • Уметь привести пример блочного алгоритма для больших данных.

Критерии приёмки

  • Результат соответствует transpose[i][j] = mat[j][i] для всех корректных индексов.
  • Для квадратного in‑place проверены все пары i
  • Тесты на граничные случаи пройдены.

Примеры тестов и критерии приёмки

Тесты:

  • mat = [] → transpose = []
  • mat = [[5]] → transpose = [[5]]
  • mat = [[1,2,3]] (1×3) → transpose = [[1],[2],[3]] (3×1)
  • Случайная матрица 100×200 → ожидаемый размер 200×100 и корректные значения.

Резюме

  • Транспонирование меняет местами строки и столбцы: transpose[i][j] = mat[j][i].
  • Для квадратных матриц можно сделать in‑place, меняя элементы относительно диагонали; для прямоугольных нужно выделять новую матрицу или применять более сложные схемы перестановок.
  • В практических задачах учитывайте объём данных и используйте блочное транспонирование или специализированные библиотеки для производительности.

Важно: прежде чем оптимизировать, убедитесь, что базовый алгоритм корректен и покрыт тестами.

Краткие выводы:

  • Алгоритмическая сложность: O(n·m).
  • Память: O(1) для in‑place (только квадратные), иначе O(n·m).
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Пересылка почты Outlook ↔ Gmail: полное руководство
Почта

Пересылка почты Outlook ↔ Gmail: полное руководство

Как узнать, что пора менять батарейку AirTag
Гаджеты

Как узнать, что пора менять батарейку AirTag

Как удалить устройства из Google Home
Умный дом

Как удалить устройства из Google Home

Вернуть «Open command window here» в Windows 11
Windows

Вернуть «Open command window here» в Windows 11

Подключение Bluetooth-наушников к Wear OS
Гаджеты

Подключение Bluetooth-наушников к Wear OS

Запустить успешную страницу на Patreon
Монетизация

Запустить успешную страницу на Patreon