Ändern der Anzahl von Zeilen und Spalten in einer Matrix in Octave
In dieser Lektion möchte ich Ihnen zeigen, wie Sie die Anzahl der Zeilen und Spalten einer Matrix in Octave anpassen können, ohne dabei die Gesamtzahl der Elemente zu verändern.
Lassen Sie uns das anhand eines praktischen Beispiels verdeutlichen.
Erstellen Sie zunächst eine rechteckige 3x2 Matrix mit drei Zeilen und zwei Spalten.
>> M = [ 1 2 ; 3 4 ; 5 6 ]
M =
1 2
3 4
5 6
Nun wandeln Sie diese 3x2 Matrix in eine 2x3 Matrix um, die aus zwei Zeilen und drei Spalten besteht.
Geben Sie dazu reshape(M,2,3) ein.
>> reshape(M,2,3)
ans =
1 5 4
3 2 6
Es ist auch möglich, die ursprüngliche Matrix in einen Zeilenvektor zu verwandeln. Geben Sie dazu reshape(M,1,6) ein.
>> reshape(M,1,6)
ans =
1 3 5 2 4 6
Oder Sie verwandeln sie in einen Spaltenvektor, indem Sie reshape(M,6,1) eingeben.
>> reshape(M,6,1)
ans =
1
3
5
2
4
6
In allen diesen Fällen bleibt die Anzahl der Elemente gleich.
Ein Vektor ist eine spezielle Form der Matrix, die entweder aus einer einzigen 1x6 Zeile oder einer einzigen 6x1 Spalte besteht.
Auf ähnliche Weise können Sie einen Vektor in eine Matrix umwandeln.
Erstellen Sie beispielsweise einen Vektor mit acht Elementen.
>> v = [ 1 2 3 4 5 6 7 8 ]
v =
1 2 3 4 5 6 7 8
Verwandeln Sie diesen Vektor in eine 2x4 Matrix mit zwei Zeilen und vier Spalten. Geben Sie dazu reshape(v,2,4) ein.
>> reshape(v, 2, 4)
ans =
1 3 5 7
2 4 6 8
Alternativ können Sie den Vektor in eine 4x2 Matrix umwandeln. Geben Sie dazu reshape(v, 4, 2) ein.
>> reshape(v, 4, 2)
ans =
1 5
2 6
3 7
4 8
Auf diese Weise können Sie einen Vektor in eine Matrix umwandeln und umgekehrt, solange die Anzahl der Elemente gleich bleibt.
Wenn die Anzahl der Elemente jedoch unterschiedlich ist, wird der reshape()-Befehl fehlschlagen.
Zum Beispiel können Sie eine 4x2 Matrix nicht in eine 3x3 Matrix umwandeln, da die erste Matrix acht Elemente und die zweite Matrix neun Elemente hat.
In diesem Fall wird der reshape()-Befehl fehlschlagen.
>> reshape(M,3,3)
error: reshape: can't reshape 3x2 array to 3x3 array