簡體   English   中英

將具有特定格式的 2-D 矩陣重塑為 3-D 矩陣 (MATLAB)

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

我有一個笛卡爾二維矩陣A ,其中包含三個(X,Y,Z)維度的劑量值箱;

  • X 坐標:從 0.0 到 50.00 cm, nx=512 bin(9.7656E-02 cm 寬)
  • Y坐標:從0.0到50.00 cm, ny=512 bins(9.7656E-02 cm寬)
  • Z坐標:從0.0到27.12 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM