Arrays matlab索引三维阵列

Arrays matlab索引三维阵列,arrays,matlab,multidimensional-array,indexing,3d,Arrays,Matlab,Multidimensional Array,Indexing,3d,假设我构造以下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 从上面的例子

假设我构造以下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网格(例如,为了索引操作,此处不相关):

如果我没有错的话,常识会这么认为

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);
[j1 j2 j3] = ndgrid(1:n);