Transpose of a Matrix

Transpose of a Matrix in C++ (4 Programs With Output)

IntermediateTopic: Array Operations Programs
Back

C++ Transpose of a Matrix Program

This program helps you to learn the fundamental structure and syntax of C++ programming.

Try This Code
#include <iostream>
using namespace std;

int main() {
    int rows = 3, cols = 3;
    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int transpose[3][3];
    
    // Calculate transpose
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transpose[j][i] = matrix[i][j];
        }
    }
    
    cout << "Original matrix:" << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    
    cout << "Transpose matrix:" << endl;
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
            cout << transpose[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}
Output
Original matrix:
1 2 3
4 5 6
7 8 9
Transpose matrix:
1 4 7
2 5 8
3 6 9

Understanding Transpose of a Matrix

This program teaches you how to transpose a matrix in C++. The transpose of a matrix is obtained by swapping its rows and columns. For example, if a matrix has element at position [i][j], in the transpose it will be at position [j][i]. Matrix transposition is a fundamental operation in linear algebra, used extensively in mathematics, computer graphics, and data science.

---

1. What This Program Does

The program transposes a matrix by swapping rows and columns. For example:

Original matrix (3x3):

1 2 3

4 5 6

7 8 9

Transpose matrix (3x3):

1 4 7

2 5 8

3 6 9

The first row becomes the first column, the second row becomes the second column, and so on.

---

2. Header File Used

This header provides:

cout for displaying output
cin for taking input from the user

---

#include <iostream>

3. Understanding Matrix Transposition

Definition

:

If A is a matrix, then A^T (transpose) is obtained by:

Converting rows to columns
Converting columns to rows

Mathematical Notation

:

If A[i][j] is an element at row i, column j, then:

A^T[j][i] = A[i][j]

Key Property

:

If original matrix is m×n, transpose is n×m
For square matrices (m = n), size remains the same

---

4. Declaring Variables

The program declares:

int rows = 3, cols = 3;

int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

int transpose[3][3];

rows and cols store the dimensions (3×3 in this case).
matrix stores the original 3×3 matrix.
transpose stores the transposed matrix.

---

5. The Transposition Algorithm

The core algorithm uses nested loops:

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

transpose[j][i] = matrix[i][j];

}

}

How it works

:

Outer loop (i) iterates through rows of original matrix.
Inner loop (j) iterates through columns of original matrix.
transpose[j][i] = matrix[i][j] swaps row and column indices.

Step-by-step

(for 3×3 matrix):

Iteration 1:

i=0, j=0

transpose[0][0] = matrix[0][0] = 1

Iteration 2:

i=0, j=1

transpose[1][0] = matrix[0][1] = 2

Iteration 3:

i=0, j=2

transpose[2][0] = matrix[0][2] = 3

Iteration 4:

i=1, j=0

transpose[0][1] = matrix[1][0] = 4

And so on...

Visual Representation

:

Original: Transpose:

[0][0] [0][1] [0][2] [0][0] [1][0] [2][0]

[1][0] [1][1] [1][2] -> [0][1] [1][1] [2][1]

[2][0] [2][1] [2][2] [0][2] [1][2] [2][2]

---

6. Displaying the Matrices

The program displays both matrices:

Original Matrix:

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

}

cout << endl;

}

        cout << matrix[i][j] << " ";

Transpose Matrix:

for (int i = 0; i < cols; i++) {

for (int j = 0; j < rows; j++) {

}

cout << endl;

}

Note: For transpose, we use cols for outer loop and rows for inner loop (dimensions are swapped).

---

        cout << transpose[i][j] << " ";

7. Other Methods (Mentioned but not shown in code)

Method 2: In-Place Transpose (Square Matrices Only)

for (int i = 0; i < rows; i++) {

for (int j = i + 1; j < cols; j++) {

swap(matrix[i][j], matrix[j][i]);

}

}

Only works for square matrices (rows = cols).
Modifies original matrix without creating new one.
More memory-efficient.

Method 3: Using Functions

void transposeMatrix(int matrix[][3], int transpose[][3], int rows, int cols) {

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

transpose[j][i] = matrix[i][j];

}

}

}

Encapsulates logic in a function.
Makes code reusable and modular.

Method 4: Using Vectors

vector<vector<int>> transpose(vector<vector<int>>& matrix) {

int rows = matrix.size();

int cols = matrix[0].size();

vector<vector<int>> result(cols, vector<int>(rows));

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

result[j][i] = matrix[i][j];

}

}

}

Uses dynamic vectors instead of arrays.
More flexible for variable-sized matrices.

---

    return result;

8. Understanding the Index Swap

Key Insight

:

The transpose operation swaps the indices:

Original: matrix[row][column]
Transpose: transpose[column][row]

Why This Works

:

Element at row 0, column 1 in original → row 1, column 0 in transpose
Element at row 1, column 0 in original → row 0, column 1 in transpose
This effectively swaps rows and columns

---

9. When to Use Each Method

-

Nested Loops with New Matrix

: Best for learning - clear and straightforward.

-

In-Place Transpose

: Best for square matrices when memory is limited.

-

Functions

: Best for code organization - reusable and modular.

-

Vectors

: Best for dynamic matrices - flexible and modern C++.

Best Practice

: Use nested loops for learning, functions for production code, vectors for dynamic sizes.

---

10. Important Considerations

Square vs Rectangular Matrices

:

Square matrices (m = n): Transpose has same dimensions.
Rectangular matrices (m ≠ n): Transpose has swapped dimensions.
Example: 2×3 matrix → 3×2 transpose

Memory Requirements

:

Creating new transpose matrix requires extra memory.
For large matrices, consider in-place transpose (if square).

Index Bounds

:

Always ensure indices are within bounds.
transpose[j][i] requires j < rows and i < cols of original.

---

11. Common Use Cases

Linear Algebra

:

Matrix operations and transformations.
Solving systems of equations.
Eigenvalue calculations.

Computer Graphics

:

Coordinate transformations.
3D rotations and projections.
Matrix transformations.

Data Science

:

Data manipulation and analysis.
Feature transformations.
Machine learning algorithms.

---

12. return 0;

This ends the program successfully.

---

Summary

Matrix transpose swaps rows and columns: transpose[j][i] = matrix[i][j].
For m×n matrix, transpose is n×m matrix.
Nested loops iterate through all elements, swapping indices.
In-place transpose works only for square matrices.
Understanding transpose is essential for linear algebra and matrix operations.
Multiple methods exist: nested loops, in-place, functions, vectors.
Choose method based on needs: learning vs. memory efficiency vs. code organization.

This program is fundamental for beginners learning matrix operations, understanding 2D arrays, and preparing for linear algebra, computer graphics, and data science applications in C++ programs.

Let us now understand every line and the components of the above program.

Note: To write and run C++ programs, you need to set up the local environment on your computer. Refer to the complete article Setting up C++ Development Environment. If you do not want to set up the local environment on your computer, you can also use online IDE to write and run your C++ programs.

Practical Learning Notes for Transpose of a Matrix

This C++ program is part of the "Array Operations Programs" topic and is designed to help you build real problem-solving confidence, not just memorize syntax. Start by understanding the goal of the program in plain language, then trace the logic line by line with a custom input of your own. Once you can predict the output before running the code, your understanding becomes much stronger.

A reliable practice pattern is to run the original version first, then modify only one condition or variable at a time. Observe how that single change affects control flow and output. This deliberate style helps you understand loops, conditions, and data movement much faster than copying full solutions repeatedly.

For interview preparation, explain this solution in three layers: the high-level approach, the step-by-step execution, and the time-space tradeoff. If you can teach these three layers clearly, you are ready to solve close variations of this problem under time pressure.

Table of Contents