【发布时间】:2010-10-22 01:40:35
【问题描述】:
假设我有一个 1×12 矩阵,我想将其调整为 4×3 矩阵。我怎么能这样做?
我目前的解决方案有点丑:
for n = 1:(length(mat)/3)
out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
有没有更好的方法来做到这一点?
【问题讨论】:
假设我有一个 1×12 矩阵,我想将其调整为 4×3 矩阵。我怎么能这样做?
我目前的解决方案有点丑:
for n = 1:(length(mat)/3)
out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
有没有更好的方法来做到这一点?
【问题讨论】:
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
【讨论】:
试试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
【讨论】:
A = 1:11; B = zeros(4,3); B(1:numel(A)) = A;
B。如果你想按行填充,我会这样做:A = 1:11; B = zeros(3,4); B(1:numel(A)) = A; B = B.';
扩展gnovice的解决方案:
如果您需要不同的矩阵构造顺序,请在调用reshape() 后使用转置(' 运算符)或permute() 更改维度顺序。
【讨论】: