How do I resize a matrix in MATLAB?

bastibe picture bastibe · Apr 27, 2009 · Viewed 41.9k times · Source

Suppose I had a 1-by-12 matrix and I wanted to resize it to a 4-by-3 matrix. How could I do this?

My current solution is kind of ugly:

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

Is there a better way to do this?

Answer

user85109 picture user85109 · Apr 27, 2009

reshape is of course the proper solution, as stated by @gnovice.

A nice feature of reshape is that it allows this:

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

So if you don't know how many columns there will be, reshape will compute it for you. Likewise, reshape will fill in the number of rows, if you leave that out.

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