【问题标题】:matlab indexing 3D arraymatlab索引3D数组
【发布时间】:2015-12-23 22:33:39
【问题描述】:

假设我构造了以下 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)

这对我来说很奇怪。我在这里发布这个问题,看看其他人对此有何看法。

【问题讨论】:

    标签: arrays matlab multidimensional-array indexing 3d


    【解决方案1】:

    matlab中有一个非常规的东西,轴的顺序是[Y,X,Z]。 Y 是第一个轴,X 是第二个轴。当 meshgrid 返回 [X,Y,Z] 时,您必须使用:

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

    然后你得到预期的结果。或者,您可以切换到ndgrid,它会按顺序返回尺寸:

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

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多