我正试图提出一个方程,该方程将3D数组中的值的索引与同一数组的索引相关联,但将其整形为列向量。
请考虑以下内容。
A = randi([1,10],3,2,2);
A2 = reshape(A,3*2*2,1);
A
和A2
的元素数相同,但是每个数组的元素排列不同。如果我为A
和A2
列出一个可能的示例,那么从几何角度看每个索引如何对齐是很清楚的。
A(:,:,1) = [9 10; 10 7; 2 1]
A(:,:,2) = [3 10; 6 2; 10 10]
A2 = [9; 10; 2; 10; 7; 1; 3; 6; 10; 10; 2; 10]
比方说n=1:1:3*2*2
,这是一个长度与A2
相同的数组,并为每个元素编号。值为A(2,2,2)=2
,索引为[i,j,k]=[2,2,2]
。我想有一个关于i,j,k和n的方程。
我研究了内置函数ind2sub
和sub2ind
,但似乎无意中对i,j和k坐标进行了整形(它们分别对应于实数x,y和z点数)与MatLab的方法不同。这使我现在很难更改所有内容,这就是为什么我需要一个方程式。
答案 0 :(得分:2)
3D索引和线性(1D)索引之间的转换由下式给出:
n=i+(j-1)*M + (k-1)*M*N
可以通过以下方式递归获得反向:
k = floor((n-1)/(M*N)) +1
n = n - (k-1)*M*N
j = floor((n-1)/M) + 1
i = n - (j-1)*M
我还没有测试过,但是我认为它将给您带来什么惊喜。