Comment puis-je changer la taille d'une matrice dans Matlab?
Question
Supposons que j'avais un 1 par 12 matrice et je voulais le redimensionner à une 4 par 3 matrice. Comment pourrais-je faire?
Ma solution actuelle est une sorte de laid:
for n = 1:(length(mat)/3)
out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
Y at-il une meilleure façon de le faire?
La solution
reshape
est bien sûr la solution appropriée, comme indiqué par @gnovice .
Une fonctionnalité intéressante de reshape
est qu'il permet ceci:
A = 1:12;
B = reshape(A,4,[]);
B =
1 5 9
2 6 10
3 7 11
4 8 12
Donc, si vous ne savez pas combien de colonnes, il y aura, reshape
calculera pour vous. De même, reshape
remplira le nombre de lignes, si vous laissez cela.
C = reshape(A,[],4)
C =
1 4 7 10
2 5 8 11
3 6 9 12
Autres conseils
Essayez le href="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/reshape.html" RESHAPE fonction:
A = (1-by-12 matrix);
B = reshape(A,4,3);
Notez que la matrice B sera rempli avec des éléments de A dans un mode en colonne (c.-à-colonnes seront remplies de haut en bas, se déplaçant de gauche à droite).
Exemple:
>> A = 1:12;
>> B = reshape(A,4,3)
B =
1 5 9
2 6 10
3 7 11
4 8 12
pour étendre la solution de gnovice:
Si vous avez besoin d'un autre ordre de construction de la matrice, l'utilisation Transpose (le 'opérateur) ou permute()
pour changer l'ordre de dimension après avoir appelé reshape()
.