2013-05-16 16 views
16

は、私は、デフォルトの列方向結果ではなくリシェイプMATLABベクトル

1 2 3 
4 5 6 

を得るために、例えば reshape(a, 2, 3)の行ごとの方法でそれを再形成んどのように、私はマトリックスa = [1 2 3 4 5 6];があると

これはおそらくこれを達成するためのinbuilt関数を持っていると思います。私はすでにこれを完全に行う関数を実装しています...しかし、より短く、より洗練された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

行方向様式でp*k行列Bにm*n行列Aを再構築するための一般的な方法がある:

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(再構築」あなたの例では「2)、3)

+0

ちょうど今、あなたの質問を削除するための乾杯 - 私は答えを準備する10分を費やしていました。私は誰か他の人にとって役に立つかもしれない。 (私はそれが良い質問だと思った)。 –

+0

ああ私は質問を再投稿します@MatthewTaylor – Mortada