8

假设我有一个1×12矩阵,我想将其调整为4×3矩阵。我怎么能这样做?

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

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

有一个更好的方法吗?

4

3 回答 3

24

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

的一个不错的功能reshape是它允许这样做:

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

因此,如果您不知道会有多少列,reshape将为您计算它。同样,reshape将填写行数,如果您忽略它。

C = reshape(A,[],4)
C =
     1     4     7    10
     2     5     8    11
     3     6     9    12
于 2009-04-27T14:14:14.540 回答
12

试试RESHAPE函数:

A = (1-by-12 matrix);
B = reshape(A,4,3);

请注意,矩阵B将以列方式填充来自A的元素(即,列将从上到下填充,从左到右移动)。

例子:

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

B =

     1     5     9
     2     6    10
     3     7    11
     4     8    12
于 2009-04-27T13:52:13.937 回答
9

扩展 gnovice 的解决方案:

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

于 2009-04-27T14:02:00.450 回答