私は 1024x3x3 の行列A
と同じ次元の別のものを持っていB
ます。2つの組み合わせである1024x2x3x3のマトリックスを作成したいのですが、誰か助けてもらえますか? 私のmatlabスキルは最悪です。
3 に答える
あなたの問題に対する1行の解決策はこれです:
D = permute(cat(4, A, B), [1 4 2 3]);
ただし、これには説明が必要です。以下は、開始するための例です。
%# A 3-d pre-allocation example
A = rand(3, 3, 3);
B = rand(3, 3, 3);
D = NaN(3, 3, 3, 2);
D(:, :, :, 1) = A;
D(:, :, :, 2) = B;
必要な出力行列を事前に割り当てることから始めて、入力行列を出力行列に手動で割り当てると、問題は概念的にはるかに簡単になります。ただし、この概念を理解したら、cat
関数を 1 回呼び出すだけで問題を解決できます。
%# The 3-d cat solution
A = rand(3, 3, 3);
B = rand(3, 3, 3);
D = cat(4, A, B);
の最初の引数はcat
、連結する次元を提供します。マトリックスの現在の最大次元よりも 1 大きい次元を選択することで、新しい次元を作成し、それに沿って連結します。
したがって、現在の次元セットの最後に新しい次元を追加したい場合、これで問題は解決します。ただし、質問では、新しいディメンションを 2 番目のインデックスとして表示したいと述べています。これに対応する事前割り当ての例の簡単な拡張は次のとおりです。
%# Another 3-d pre-allocation example
A = rand(3, 3, 3);
B = rand(3, 3, 3);
D = NaN(3, 2, 3, 3);
D(:, 1, :, :) = A;
D(:, 2, :, :) = B;
しかし、おそらく明示的な割り当てを伴わないより良い方法は、 のトリックを使用しcat
て追加の次元を作成し、次に を使用permute
して次元を必要な順序に再配置することです。たとえば、次のようになります。
%# Another 3-d example with cat and permute
A = rand(3, 3, 3);
B = rand(3, 3, 3);
D = cat(4, A, B);
D = permute(D, [1 4 2 3]);
お役に立てれば。乾杯。
を連結A
し、結果の行列の次元を変更するためにB
使用します。reshape
C = reshape([A; B],1024,2,3,3);
できるよ:
与えられた: A -> 1024 x 3 x 3 B -> 1024 x 3 x 3
オプションを選択してください:
1) C = [AB]; %-> 1024×6×3
2) C = [A ; B]; %-> 2048 x 3 x 3
3) C = ゼロ (1024,3,3,2);
C(:,:,:,1) = A;
C(:,:,:,2) = B;
%C -> 1024 × 3 × 3 × 2