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 returns [X,Y,Z] 你必须使用:
[j2 j1 j3] = meshgrid(1:n);
然后你得到了预期的结果。或者,您可以切换到 ndgrid
,其中 returns 尺寸按顺序排列:
[j1 j2 j3] = ndgrid(1:n);
假设我构建了以下 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 returns [X,Y,Z] 你必须使用:
[j2 j1 j3] = meshgrid(1:n);
然后你得到了预期的结果。或者,您可以切换到 ndgrid
,其中 returns 尺寸按顺序排列:
[j1 j2 j3] = ndgrid(1:n);