2015-09-26 101 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 –