将具有特定格式的 2-D 矩阵重塑为 3-D 矩阵 (MATLAB)

Reshape 2-D matrix with a specific format into a 3-D matrix (MATLAB)

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

因此,A中的元素总数为nx*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)

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)

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)

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

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

我想将此矩阵重塑为尺寸为 [nx ny nz] = [512 512 113] 的等效笛卡尔 3-D 矩阵 B(ix,iy,iz) - 是否有有效的方法来执行此操作?此外,由于 fscanf() 每行包含 10 个元素,所以当 fscanf() 读取时,最后一行附加了 8 个额外的元素 - 如何在重塑时不包含这些值?

非常感谢!!

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

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