2011-12-28 19 views
4

私は、3次元行列を2次元行列に変換しています。これは形状変換です:[n x m x o] - > [n * o x m]。3次元から2次元への行列の整理

行列の要素は行に関連しています。したがって、結果の行列には同じ行が必要です。

A = rand(2,2,3); 

これを行う:

C = reshape(A, 2*3, 2); 

は、だから私はこれを行うA.

で行を維持されていません。

B = zeros(size(A,1)*size(A,3),size(A,2)); 
first_indice = 1; 
for i = 1:size(A,3) 
    B(first_indice:size(A,1)*i,:)=A(:,:,i); 
    first_indice = first_indice + size(A,1); 
end 

を多分リシェイプを使用して、より効率的な方法はあります?

ありがとうございます!

答えて

4

reshapeは、最初の次元から始まる行列要素を結合します。したがって、解決策は、形状変更の前に寸法を並べ替えることです。あなたの場合、それは次のようにする必要があります:

% A is the input matrix of dimensions (n x m x o). 
B = ipermute(A, [1 3 2]); 
C = reshape(B, n*o, m); 
+0

ipermuteの代わりにpermuteも使いますか?私は本当に3次元のパーミュテーションを理解していない... – rauldg

+1

私の意見では、2つ以上のupvotesに値する素晴らしいanwer。 – Wok