Transpose of a Matrix

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

C++Intermediate
C++
#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

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

#include <iostream>

This header provides:

  • cout for displaying output
  • cin for taking input from the user

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 << matrix[i][j] << " "; } cout << endl; }

Transpose Matrix:

for (int i = 0; i < cols; i++) { for (int j = 0; j < rows; j++) { cout << transpose[i][j] << " "; } cout << endl; }

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


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];
    }
}
return result;

}

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

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.