[英]MATLAB - concatenation of 3rd matrix dimension
我有一个大小为KxNxZ的3D矩阵。 我想将第3维的子矩阵连接成一个大小为K * ZxN的2D矩阵,然后将它们按行连接。 实现此结果的最佳方法是什么?
谢谢!
例:
%generates input
M = cat(3,[(1:3)',(4:6)'],[(7:9)',(10:12)'],[(13:15)',(16:18)']);
DesiredOutput = [[(1:3)';(7:9)';(13:15)'],[(4:6)';(10:12)';(16:18)']];
输入矩阵
M(:,:,1) =
1 4
2 5
3 6
M(:,:,2) =
7 10
8 11
9 12
M(:,:,3) =
13 16
14 17
15 18
所需的输出矩阵:
DesiredOutput =
1 4
2 5
3 6
7 10
8 11
9 12
13 16
14 17
15 18
Eskapp步入正轨。 首先使用permute
来交换第二维和第三维,以便获得K x Z x N
矩阵。 完成此操作后,您可以使用reshape
来展开矩阵,以便获取尺寸为K x Z
每个2D切片,并将其转换为单列,使2D切片的每一列都展开。 值得庆幸的是,这是MATLAB在重塑矩阵时的工作方式,因此自然而然地花费了很少的精力。 然后,将所有这些列连接在一起以构成矩阵。
您首先以这种方式使用permute
:
Mp = permute(M, [1 3 2]);
这告诉我们您想交换第二维和第三维。 接下来,在此矩阵上使用重reshape
,以确保每个列都有K x Z
元素,其中2D切片的每个列都展开为单个列。
DesiredOutput = reshape(Mp, [], size(M,2));
size(M,2)
访问原始矩阵中的N
值。 因此,您要使DesiredOutput
具有K*Z
行和N
列。 []
自动推断出输出矩阵让我们轻松完成的行数。
因此,我们得到:
>> DesiredOutput
DesiredOutput =
1 4
2 5
3 6
7 10
8 11
9 12
13 16
14 17
15 18
如果您不想使用临时变量,我们可以将所有内容组合为一个语句,如下所示。
DesiredOutput = reshape(permute(M, [1 3 2]), [], size(M,2));
我主要使用一个临时变量来解释过程中的每个步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.