我有一个 1024x3x3 矩阵A
和另一个相同尺寸的矩阵B
。我想制作一个 1024x2x3x3 的矩阵,它是两者的组合,有人可以帮忙吗?我的matlab技能很烂。
问问题
241 次
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
连接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 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 回答