簡體   English   中英

matlab索引3D數組

[英]matlab indexing 3D array

假設我構造了以下 3D 數組

n = 3;
A = zeros(n,n,n);
A(1:n^3) = 1:n^3;

這使

>> A

A(:,:,1) =

 1     4     7
 2     5     8
 3     6     9

A(:,:,2) =

10    13    16
11    14    17
12    15    18

A(:,:,3) =

19    22    25
20    23    26
21    24    27

可以從上面的示例中看到 matlab 如何索引 3D 數組。 假設我想訪問這個數組的 (ii = 1, jj = 3, kk = 2) 元素,這可以通過

>>A(1,3,2)

ans =

16

或者,我可以根據上面演示的 matlab 索引規則使用以下形式

A(ii + (jj-1)*n + (kk-1)*n^2)

例如,對於 ii = 1, jj = 3, kk = 2, 我得到

>>  A(1 + (3-1)*3 + (2-1)*3^2)

ans =

16

為了說明這個問題,我定義了以下 3D 網格(例如為了索引操作,這里不相關):

[j1 j2 j3] = meshgrid(1:n);

如果我沒有錯,常識會期望

A(j1 + (j2-1)*n +(j3-1)*n^2)

根據上述討論給我相同的矩陣,但我得到

>> A(j1 + (j2-1)*3 +(j3-1)*3^2)

ans(:,:,1) =

 1     2     3
 4     5     6
 7     8     9

ans(:,:,2) =

10    11    12
13    14    15
16    17    18

ans(:,:,3) =

19    20    21
22    23    24
25    26    27

由此我看到,如果你想獲得相同的 3D 數組,你實際上需要使用

>> A(j2 + (j1-1)*3 +(j3-1)*3^2)

這對我來說很奇怪。 我在這里發布這個問題,看看其他人對此有何看法。

matlab中有一個非常規的東西,軸的順序是[Y,X,Z]。 Y 是第一個軸,X 是第二個軸。 當 meshgrid 返回 [X,Y,Z] 時,您必須使用:

[j2 j1 j3] = meshgrid(1:n);

然后你會得到預期的結果。 或者,您可以切換到ndgrid ,它按順序返回尺寸:

[j1 j2 j3] = ndgrid(1:n);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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