[英]Reshape 2-D matrix with a specific format into a 3-D matrix (MATLAB)
我有一個笛卡爾二維矩陣A
,其中包含三個(X,Y,Z)維度的劑量值箱;
nx=512
bin(9.7656E-02 cm 寬)ny=512
bins(9.7656E-02 cm寬)nz=113
bins(2.4000E-01 cm寬) 因此, A
中的元素總數為nx*ny*nz=29622272
。 讀取a.dat-file時,矩陣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
分配給A(ix,iy,iz)
中的 Z 坐標,並且第一個索引比第二個索引運行得更快,並且第二個比第三個快。 因此,當從輸入文件中讀取矩陣時, A
的大小為[2962228 10]
(輸入文件中的最后一行僅包含兩個元素/列)。
我想將此矩陣重塑為尺寸為[nx ny nz] = [512 512 113]
的等效笛卡爾 3-D 矩陣B(ix,iy,iz)
- 有沒有一種有效的方法來做到這一點? 此外,在fscanf()
讀取時,最后一行附加了 8 個額外元素,因為A
每行包含 10 個元素 - 重塑時如何不包括這些值?
提前謝謝了!!
正如評論中所討論的,以下工作:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.