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?

Était-ce utile?

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().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top