Ugrás a tartalomhoz

matrix transposition

A Wikiszótárból, a nyitott szótárból


Főnév

matrix transposition (tsz. matrix transpositions)

  1. (informatika) mátrix transzponálása

A mátrix transzponálása egy olyan művelet, amely során a mátrix sorait és oszlopait felcseréljük. Például, ha van egy m x n méretű mátrixunk, akkor annak transzponáltja egy n x m méretű mátrix lesz, ahol az eredeti mátrix sorai az új mátrix oszlopaivá válnak, és az eredeti oszlopok pedig sorokká.

Példa a mátrix transzponálására 2D tömbök használatával C++-ban

A következő C++ program bemutatja, hogyan végezhetjük el a mátrix transzponálását két dimenziós (2D) tömbök használatával.

Mátrix transzponálása C++-ban:

#include <iostream>
using namespace std;

int main() {
    // Eredeti mátrix: 2x3-as
    int matrix[2][3] = {
        {1, 2, 3},
        {4, 5, 6}
    };

    // Transzponált mátrix: 3x2-es
    int transposed[3][2];

    // A mátrix transzponálása
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            transposed[j][i] = matrix[i][j];  // Sorok és oszlopok felcserélése
        }
    }

    // Az eredeti mátrix kiírása
    cout << "Eredeti mátrix:" << endl;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    // A transzponált mátrix kiírása
    cout << "\nTranszponált mátrix:" << endl;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            cout << transposed[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Program működése:

  1. Eredeti mátrix deklarálása: Az int matrix[2][3] egy 2 sorból és 3 oszlopból álló mátrixot jelent.
  2. Transzponált mátrix létrehozása: Az int transposed[3][2] egy 3 sorból és 2 oszlopból álló mátrix, amelybe a transzponált értékeket fogjuk beírni.
  3. Mátrix transzponálása:
    • A külső for ciklus a sorokat iterálja (i), míg a belső for ciklus az oszlopokat (j).
    • A transzponálás során az transposed[j][i] = matrix[i][j] kifejezés gondoskodik arról, hogy a matrix sorai az transposed oszlopaiba kerüljenek, és fordítva.
  4. Mátrix kiírása:
    • Először az eredeti mátrixot írjuk ki, majd a transzponált mátrixot.

Kimenet:

Ha a fenti kódot futtatjuk, akkor az alábbi kimenetet kapjuk:

Eredeti mátrix:
1 2 3 
4 5 6 

Transzponált mátrix:
1 4 
2 5 
3 6 

Magyarázat:

  • Az eredeti mátrix 2x3 méretű:

    1 2 3
    4 5 6
  • A transzponált mátrix 3x2 méretű lesz, és a sorok és oszlopok felcserélődnek:

    1 4
    2 5
    3 6

Általánosítás:

Ha dinamikusan szeretnénk kezelni a mátrixokat, például változó számú sorral és oszloppal, akkor azt is megoldhatjuk. Ehhez dinamikus memóriafoglalást használhatunk, például new operátorral. Az alábbiakban bemutatok egy példát, ahol a mátrix méretét a felhasználó adja meg:

Dinamikus mátrix transzponálás:

#include <iostream>
using namespace std;

int main() {
    int rows, cols;

    // Felhasználói input
    cout << "Adja meg a mátrix sorainak számát: ";
    cin >> rows;
    cout << "Adja meg a mátrix oszlopainak számát: ";
    cin >> cols;

    // Dinamikus memóriafoglalás az eredeti mátrix számára
    int** matrix = new int*[rows];
    for (int i = 0; i < rows; i++) {
        matrix[i] = new int[cols];
    }

    // Felhasználói input az eredeti mátrix feltöltéséhez
    cout << "Adja meg az eredeti mátrix elemeit:" << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cin >> matrix[i][j];
        }
    }

    // Dinamikus memóriafoglalás a transzponált mátrix számára
    int** transposed = new int*[cols];
    for (int i = 0; i < cols; i++) {
        transposed[i] = new int[rows];
    }

    // Mátrix transzponálása
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposed[j][i] = matrix[i][j];
        }
    }

    // Eredeti mátrix kiírása
    cout << "\nEredeti mátrix:" << endl;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    // Transzponált mátrix kiírása
    cout << "\nTranszponált mátrix:" << endl;
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
            cout << transposed[i][j] << " ";
        }
        cout << endl;
    }

    // Dinamikus memória felszabadítása
    for (int i = 0; i < rows; i++) {
        delete[] matrix[i];
    }
    delete[] matrix;
    for (int i = 0; i < cols; i++) {
        delete[] transposed[i];
    }
    delete[] transposed;

    return 0;
}

Ez a program dinamikusan kezeli a mátrixok méretét, lehetővé téve a felhasználó számára, hogy megadja a sorok és oszlopok számát, és ennek megfelelően elvégezze a transzponálást.

Összegzés:

A mátrix transzponálása egy alapvető lineáris algebrai művelet, amely egyszerűen elvégezhető 2D tömbök használatával C++-ban. Az alapvető lépések a sorok és oszlopok felcserélése a megfelelő indexeléssel, és a mátrix elemeinek kiírása a transzponálás után. A dinamikus memóriafoglalás segíthet, ha a mátrix mérete futás közben változik.