如何在MATLAB中调整矩阵的大小?

bas*_*ibe 8 matlab matrix reshape

假设我有一个12乘12矩阵,我想把它调整为4乘3矩阵.我怎么能这样做?

我目前的解决方案有点难看:

for n = 1:(length(mat)/3)
    out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

小智 24

reshape当然是正确的解决方案,如@gnovice所述.

一个很好的功能reshape是它允许这样:

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

因此,如果您不知道将有多少列,reshape将为您计算它.同样,reshape如果你把它留出来,将填写行数.

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

  • +1:太好了!我以前从未注意到这一点.我想我从来没有使用它. (2认同)

gno*_*ice 12

尝试RESHAPE功能:

A = (1-by-12 matrix);
B = reshape(A,4,3);
Run Code Online (Sandbox Code Playgroud)

注意,矩阵B将以列方式填充来自A的元素(即,列将从顶部到底部填充,从左向右移动).

例:

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

B =

     1     5     9
     2     6    10
     3     7    11
     4     8    12
Run Code Online (Sandbox Code Playgroud)


Jas*_*n S 9

扩展gnovice的解决方案:

如果您需要不同的矩阵构造顺序,请使用转置('运算符)或permute()在调用后更改维度顺序reshape().