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数组。假设我想访问这个数组的(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);

相关内容

  • 没有找到相关文章

最新更新