假设我有一个矩阵a = [1 2 3 4 5 6];
,我如何以行方式重塑它,例如
产生reshape(a, 2, 3)
1 2 3
4 5 6
而不是MATLAB生成的默认列式结果:
1 3 5
2 4 6
我认为这是一项微不足道的任务,可能有一个内置功能来实现这一目标。我已经实现了一个完美的功能......然而,是否有更短,更整洁,更多的MATLAB方式?感谢。
function y = reshape2(x, m, n)
y = zeros(m, n);
ix = 0;
for i = 1:m
for j = 1:n
ix = ix + 1;
y(i, j) = x(ix);
end
end
end
答案 0 :(得分:22)
这个怎么样?
reshape(a, 3, 2)'
答案 1 :(得分:3)
以行方式将m*n
矩阵A重新整形为p*k
矩阵B的一般方法是:
c=reshape(A',1,m*n)
B=reshape(c,k,p)'
example: m=3 n=4 , p=6, q=2
A=[1 2 3 4; 5 6 7 8; 9 10 11 12]
c=[1 2 3 4 5 6 7 8 9 10 11 12]
B=[1 2 ; 3 4; 5 6; 7 8; 9 10; 11 12]
答案 2 :(得分:1)
确实是重塑(A',cols,rows)'
(在你的例子中重塑(a',3,2)')