Matlab组合矩阵

时间:2012-12-05 02:46:54

标签: matlab matrix

我有一个1024x3x3矩阵A和另一个相同维度B。我想制作一个1024x2x3x3的矩阵,这是两者的组合,有人可以帮忙吗?我的matlab技能​​很糟糕。

3 个答案:

答案 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)

连接AB并使用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