2015-09-26 105 views
2

假設我構造如下3D陣列MATLAB索引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陣列。假設我想訪問(ⅱ= 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,I得到

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

ans = 

16 

爲了說明問題,我定義以下3D meshgrid(說的指數處理的目的S的位置是不相關的):

[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) 

這對我來說很陌生。我在這裏發佈這個問題,以瞭解其他人對此的看法。

回答

1

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

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

然後您會得到預期結果。另外,您可以切換到ndgrid返回的尺寸,以便:

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

@kelesa相關:http://stackoverflow.com/a/22461766/2586922 –