我有一个大小为12,3,43
的3D矩阵:
val(:,:,1) =
9.8226 -0.5904 -0.2306
1.9440 -0.4382 -0.4923
0.0519 0.6613 0.6225
1.7321 -0.4460 -0.5919
0.0833 0.6556 0.5539
9.8226 9.8226 9.8226
9.8729 0.5276 58.2741
3.2360 0.0003 0.1039
0.0720 0.9859 0.7473
0.4310 0.0223 0.0298
0.3656 -0.4085 -1.8384
1.0401 -0.4198 0.0106
...
val(:,:,43) =
16.2780 2.1931 0.4593
3.1613 1.3327 0.5388
0.0016 0.1826 0.5900
2.7613 1.1525 0.5731
0.0058 0.2491 0.5666
16.2780 16.2780 16.2780
15.2386 12.3233 -71.4624
6.6782 0.1105 0.0858
0.0098 0.7396 0.7696
1.1318 0.2056 0.0357
-0.7161 0.1360 0.5850
0.7256 0.7578 0.6312
首先,我想改变每个矩阵的方向,就像这样,我使用matrix(:,:,1).'
:
9.8226 1.9440 0.0519 1.7321 0.0833 9.8226 9.8729 3.2360 0.0720 0.4310 0.3656 1.0401
-0.5904 -0.4382 0.6613 -0.4460 0.6556 9.8226 0.5276 0.0003 0.9859 0.0223 -0.4085 -0.4198
-0.2306 -0.4923 0.6225 -0.5919 0.5539 9.8226 58.2741 0.1039 0.7473 0.0298 -1.8384 0.0106
然后,我想创建一个新的3D矩阵,该矩阵从每个条目,第二个和第三个条目等中收集第一行。因此,最后我将得到一个大小为12,43,3
的3D矩阵。
我已经尝试过permute
和reshape
,但是我似乎无法让他们为这种性质的任务而工作。
一个小玩具的例子:
a = [1 11; 2 22; 3 33]
b = [4 43; 5 55; 6 66]
c = [7 76; 8 88; 9 90]
d = [10 101; 11 111; 12 121];
Z = cat(3,a,b,c,d) % The 3D initial matrix
应转换为
Z_hope(:,:,1) =
1 2 3
4 5 6
7 8 9
10 11 12
Z_hope(:,:,2) =
11 22 33
43 55 66
76 88 90
101 111 121
“改变方向”的2D矩阵称为“转置”矩阵。如果要在3D矩阵中为每个“页面”(第3维)转置前两个维(即行/列),请使用permute(ZZ, [2 1 3])
。这将交换(=置换)前两个维度。
然后,正如您提到的,您可以使用ZZ2 = shiftdim( reshape( ZZ, [], 3, 4 ), 1 )
将3D矩阵整形为4D,并在页面中具有所需的数字,最后使用shiftdim
(permute
的精简版本)正确尺寸。