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

Транспонирование матриц: примеры на 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
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство