Предположим, что я построить следующий 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-массив из приведенного выше примера. Предположим, что я хотел бы получить доступ (II = 1, JJ = 3, кк = 2) элемент этого массива, который может быть сделано
>>A(1,3,2)
ans =
16
В качестве альтернативы, можно использовать следующую форму, основанную на правиле индексации Matlab было показано выше
A(ii + (jj-1)*n + (kk-1)*n^2)
в качестве примера, для II = 1, JJ = 3, кк = 2, я получаю
>> 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 –