4

3D マトリックスを 2D マトリックスに変換しています。これは形状変換です: [nxmxo] -> [n*oxm]。

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

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

おそらくreshapeを使用するより効率的な方法はありますか?

どうもありがとう!

4

1 に答える 1

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);
于 2011-12-28T13:37:44.477 に答える