我有一个1024x3x3矩阵A
和另一个相同维度B
。我想制作一个1024x2x3x3的矩阵,这是两者的组合,有人可以帮忙吗?我的matlab技能很糟糕。
答案 0 :(得分:2)
您问题的一线解决方案是:
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
函数调用一个来解决问题:
%# The 3-d cat solution
A = rand(3, 3, 3);
B = rand(3, 3, 3);
D = cat(4, A, B);
cat
的第一个参数提供了您想要连接的维度。通过选择比矩阵的当前最大维度大一维的维度,我们创建一个新维度并沿着它连接。
因此,如果我们想要做的是在当前维度集的末尾添加新维度,这就解决了问题。但是,在问题中,您声明您希望新维度显示为第二个索引。适用于此的预分配示例的简单扩展是:
%# 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]);
希望这会有所帮助。欢呼声。
答案 1 :(得分:2)
连接A
和B
并使用reshape
更改结果矩阵的维度:
C = reshape([A; B],1024,2,3,3);
答案 2 :(得分:0)
你可以这样做:
给定: A - > 1024 x 3 x 3 B - > 1024 x 3 x 3
1)C = [A B]; % - > 1024 x 6 x 3
2)C = [A; B]; % - > 2048 x 3 x 3
3)C =零(1024,3,3,2);
C(:,:,:,1)= A;
C(:,:,:,2)= B;
%C - > 1024 x 3 x 3 x 2