matlab 将3D数组串连成2D数组- for循环?

5ssjco0h  于 2022-12-13  发布在  Matlab
关注(0)|答案(1)|浏览(147)

我的问题如下:
1.我有一个6行(固定)、2列(固定)、7页(* 最多可变化100页以上)的3D阵列(6x 2x 7
1.我想将这个3D数组连接成一个2D数组(6
7 x2)(同样,7可以变化到100+)
1.我需要将此3D数组的列行为保留到2D数组中(xy坐标)
1.我的问题是-我需要一个for循环来实现这个吗?如果需要,怎么做?
我可以手动输入此操作,并使用下面的代码实现我想要的结果(xy3d是3D数组,xy是2D数组):

xy = cat(1,xy3d(:,:,1),...
           xy3d(:,:,2),...
           xy3d(:,:,3),...
           xy3d(:,:,4),...
           xy3d(:,:,5),...
           xy3d(:,:,6),...
           xy3d(:,:,7)); %Produces xy(42:2) when...xy3d(6:2:7)
ctrmrzij

ctrmrzij1#

您可以使用循环来实现这一点,但也可以使用permute以正确的顺序获取数据,然后使用reshape以所需的形状获取数组。
你需要注意存储顺序。MATLAB按列存储数据。也就是说,元素(1,1,1)先出现,然后是(2,1,1),然后是(3,1,1),...然后是(1,2,1),(2,2,1),...然后是(1,1,2),等等。
reshape不会改变存储空间,因此直接将其应用于数组不会产生正确的结果。数组的第一列包含数据的前一半(从两列到第三维的一半),其余部分在第二列。也就是说,各个x-y对将被拆分。
我们首先需要permute将第二维移到最后。这将复制数据。现在内存中的前半部分数据将是所有的x分量,后半部分是y分量。reshape不会复制数据,它只会将前半部分数据复制一列,将后半部分数据复制第二列。

xy = permute(xy3d, [1,3,2]);
xy = reshape(xy, [], 2);

reshape调用中的[]表示在第一维中放置所需数量的元素,对于第二维,我们指定为2。

相关问题