假设我有一个1x12的矩阵,我想将其调整为一个4x3的矩阵。我该如何做呢?
我的现有解决方案有点丑陋:
我的现有解决方案有点丑陋:
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;
- gnoviceA = 1:11; B = zeros(4,3); B(1:numel(A)) = A;
这是按列进行的吗? - Parth SaneB
。如果您想按行填充,我会这样做:A = 1:11; B = zeros(3,4); B(1:numel(A)) = A; B = B.';
- gnovice为了扩展gnovice的解决方案:
如果您需要不同顺序的矩阵构建,请使用转置('运算符)或permute()
在调用reshape()
之后更改维度排序。