将数组中值的特定索引与数组MatLab的大小相关的方程式

时间:2018-07-19 05:42:17

标签: arrays matlab

我正试图提出一个方程,该方程将3D数组中的值的索引与同一数组的索引相关联,但将其整形为列向量。

请考虑以下内容。

A = randi([1,10],3,2,2);
A2 = reshape(A,3*2*2,1);

AA2的元素数相同,但是每个数组的元素排列不同。如果我为AA2列出一个可能的示例,那么从几何角度看每个索引如何对齐是很清楚的。

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的方程。

我研究了内置函数ind2subsub2ind,但似乎无意中对i,j和k坐标进行了整形(它们分别对应于实数x,y和z点数)与MatLab的方法不同。这使我现在很难更改所有内容,这就是为什么我需要一个方程式。

1 个答案:

答案 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 

我还没有测试过,但是我认为它将给您带来什么惊喜。