Wie kann ich eine Matrix in Matlab ändern?
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?
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()
.