1

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

4

3 回答 3

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;

但也许不涉及显式分配的更好方法是使用技巧 withcat创建一个额外的维度,然后使用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

连接AB并用于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 x 6 x 3

2) C = [A; 乙]; %-> 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

于 2012-12-05T03:27:49.153 回答