3d矩阵的复杂重塑

问题描述 投票:0回答:1

我有一个大小为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矩阵。

我已经尝试过permutereshape,但是我似乎无法让他们为这种性质的任务而工作。

一个小玩具的例子:

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
arrays matlab matrix reshape
1个回答
0
投票

“改变方向”的2D矩阵称为“转置”矩阵。如果要在3D矩阵中为每个“页面”(第3维)转置前两个维(即行/列),请使用permute(ZZ, [2 1 3])。这将交换(=置换)前两个维度。

然后,正如您提到的,您可以使用ZZ2 = shiftdim( reshape( ZZ, [], 3, 4 ), 1 )将3D矩阵整形为4D,并在页面中具有所需的数字,最后使用shiftdimpermute的精简版本)正确尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.