垂直连接多维矩阵

时间:2016-04-29 15:10:08

标签: arrays matlab matrix multidimensional-array

我有一个大小为J的多维矩阵2 - by - 7 - by - N我希望将其垂直连接到2*N -by - 7矩阵。

例如:

>> J(:,:,1:2)

ans(:,:,1) =

1.0000         0         0    0.2263         0    0.0069    0.4996
     0    1.0000         0    1.4156         0   -0.1665    0.0208

ans(:,:,2) =

2.0000         0         0   -0.3432         0   -0.0069    0.4996
     0    3.0000         0    1.3919         0    0.1665    0.0208

需要连接到

1.0000         0         0    0.2263         0    0.0069    0.4996
     0    1.0000         0    1.4156         0   -0.1665    0.0208
2.0000         0         0   -0.3432         0   -0.0069    0.4996
     0    3.0000         0    1.3919         0    0.1665    0.0208

如何做到这一点?

1 个答案:

答案 0 :(得分:3)

使用permute重新排列维度的顺序,然后reshape将其更改为2*N - by - 7矩阵:

reshape(permute(J, [1,3,2]),[],size(J,2));

您需要permute的原因是因为MATLAB是列主要意义,它通过首先向下列将多维数组的元素存储为向量。因此,当您调用reshape时,它首先向下查看列,然后在行用完时移动到下一列。由于您希望在第一维度下堆叠第三维,因此需要确保当reshape用完行时,它会转到第三维。由于reshape实际上转到了第二维,因此您需要使用permute来交换第二维和第三维。

只是为了好玩,这是另一种方法:

J2 = permute(J, [2,1,3]);
J2(:,:).'

第三个使用comma-separated-lists代替

C = mat2cell(J, size(J,1), size(J,2), ones(1,1,size(J,3)));
cat(1,C{:})   %// Or vertcat(C{:})