首页 > 解决方案 > 将具有特定格式的 2-D 矩阵重塑为 3-D 矩阵 (MATLAB)

问题描述

我有一个笛卡尔二维矩阵 ,A它包含三个(X,Y,Z)维度的剂量值箱;

因此, 中的元素总数Anx*ny*nz=29622272。读取 .dat 文件时,矩阵A中的数据按以下格式存储

A(1,1,1) A(2,1,1) A(3,1,1) A(4,1,1) A(5,1,1) A(6,1,1) A( 7,1,1) A(8,1,1) A(9,1,1) A(10,1,1)

A(11,1,1) A(12,1,1) A(13,1,1) A(14,1,1) A(15,1,1) A(16,1,1) A( 17,1,1) A(18,1,1) A(19,1,1) A(20,1,1)

…</p>

A(503,1,1) A(504,1,1) A(505,1,1) A(506,1,1) A(507,1,1) A(508,1,1) A( 509,1,1) A(510,1,1) A(511,1,1) A(512,1,1)

A(1,2,1) A(2,2,1) A(3,2,1) A(4,2,1) A(5,2,1) A(6,2,1) A( 7,2,1) A(8,2,1) A(9,2,1) A(10,2,1)

A(11,2,1) A(12,2,1) A(13,2,1) A(14,2,1) A(15,2,1) A(16,2,1) A( 17,2,1) A(18,2,1) A(19,2,1) A(20,2,1)

…</p>

…</p>

A(1,1,2) A(2,1,2) A(3,1,2) A(4,1,2) A(5,1,2) A(6,1,2) A( 7,1,2) A(8,1,2) A(9,1,2) A(10,1,2)

…</p>

A(511,512,113) A(512,512,113)

其中第一个索引ix分配给 X 坐标,索引iy分配给 Y 坐标,索引iz分配给 Z 坐标A(ix,iy,iz),第一个索引比第二个运行得快,第二个比第三个快。因此,当从输入文件中读取矩阵时,A具有大小[2962228 10](输入文件中的最后一行仅包含两个元素/列)。

我想将此矩阵重塑为等效的笛卡尔 3-D 矩阵 ,B(ix,iy,iz)尺寸[nx ny nz] = [512 512 113]- 有没有一种有效的方法来做到这一点?此外,读取时在最后一行附加了 8 个额外元素,fscanf()因为A每行包含 10 个元素 - 重塑时如何不包括这些值?

提前谢谢了!!

标签: matlabmatrix3d2dreshape

解决方案


正如评论中所讨论的,以下工作:

B = A.'; % transpose to have the data in column-major order
B = B(1:end-8); % remove last values in linear order. Gives a column vector
result = reshape(B, [512 512 113]); % reshape to desired size

推荐阅读