我有一个大小为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
如何做到这一点?
答案 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{:})