繁体   English   中英

MATLAB-第三矩阵维的级联

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM