1

私は 1024x3x3 の行列Aと同じ次元の別のものを持っていBます。2つの組み合わせである1024x2x3x3のマトリックスを作成したいのですが、誰か助けてもらえますか? 私のmatlabスキルは最悪です。

4

3 に答える 3

2

あなたの問題に対する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]);

お役に立てれば。乾杯。

于 2012-12-05T03:10:58.687 に答える
2

を連結Aし、結果の行列の次元を変更するためにB使用します。reshape

C = reshape([A; B],1024,2,3,3);
于 2012-12-05T09:53:56.740 に答える
0

できるよ:

与えられた: 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

于 2012-12-05T03:27:49.153 に答える