我的问题如下:
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)
1条答案
按热度按时间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
不会复制数据,它只会将前半部分数据复制一列,将后半部分数据复制第二列。reshape调用中的
[]
表示在第一维中放置所需数量的元素,对于第二维,我们指定为2。