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)
這對我來說很陌生。我在這裏發佈這個問題,以瞭解其他人對此的看法。
@kelesa相關:http://stackoverflow.com/a/22461766/2586922 –