2013-05-16 51 views
16

说我有一个矩阵a = [1 2 3 4 5 6];,我该如何重塑它在例如 reshape(a, 2, 3)逐行方式产生重塑MATLAB矢量

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 

回答

21

这个怎么样?

reshape(a, 3, 2)'

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] 
1

它确实重塑(A”,COLS,行) “

(重塑(A”,3,2)”在你的例子)

+0

干杯删除你的问题刚才 - 我刚刚花了10分钟准备一个答案。我可能对别人有用。 (我认为这是一个很好的问题)。 –

+0

哦,我会重新发布这个问题,然后@MatthewTaylor – Mortada