Frage

Angenommen, ich hatte eine 1-mal-12 Matrix und ich wollten es an a ändern 4-mal-3 Matrix. Wie könnte ich das machen?

Meine aktuelle Lösung ist irgendwie hässlich:

for n = 1:(length(mat)/3)
    out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end

Gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

reshape ist natürlich die richtige Lösung, wie angegeben von @ggnovice.

Ein schönes Merkmal von reshape ist, dass es dies zulässt:

A = 1:12;
B = reshape(A,4,[]);
B =
     1     5     9
     2     6    10
     3     7    11
     4     8    12

Wenn Sie also nicht wissen, wie viele Spalten es geben wird, wird, reshape wird es für Sie berechnen. Ebenfalls, reshape Füllt die Anzahl der Zeilen aus, wenn Sie das weglassen.

C = reshape(A,[],4)
C =
     1     4     7    10
     2     5     8    11
     3     6     9    12

Andere Tipps

Versuchen Sie das Umgestalten Funktion:

A = (1-by-12 matrix);
B = reshape(A,4,3);

Beachten Sie, dass die Matrix B wird mit Elementen gefüllt sein von EIN kolumentenweise (IE -Säulen werden von oben nach unten gefüllt und bewegen sich von links nach rechts).

Beispiel:

>> A = 1:12;
>> B = reshape(A,4,3)

B =

     1     5     9
     2     6    10
     3     7    11
     4     8    12

So erweitern Sie die Lösung von Gnovices:

Wenn Sie eine andere Reihenfolge der Matrixkonstruktion benötigen, verwenden Sie Transponierung (den Betreiber) oder permute() Um die Dimensionsordnung zu ändern, nachdem Sie angerufen haben reshape().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top