如何找到相对于矩阵位置的数组索引?

How to find array index relative to the position in matrix?

我有一个二维数组(矩阵)和它的数组(1D)表示,我想知道一个数组的[x][y]位置之间的关系是什么矩阵中的项目具有相应项目数组表示的 [index]

解释: 假设我有 3x4 大小的矩阵:

Matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Array = [1,2,3,4,5,6,7,8,9,10,11,12]

'6'在矩阵中的位置是[1][1],它在数组中的位置是[5]

所以我想知道 b/w [1][1][5]3x4.

大小的矩阵中的关系是什么

感谢您的建议和回复。

PS:我需要它背后的数学逻辑,而不是任何语言(matlab)中的函数来实现这个功能。

MATLAB 按列索引值,从位置 1 开始,而不是零。因此在矩阵中:

A =
     1     2     3     4
     5     6     7     8
     9    10    11    12

A(:).'   %// Straighten it out to column vector and transpose (to make it a row) 
ans =
     1     5     9     2     6    10     3     7    11     4     8    12

因此,A(1) = 1A(2) = 5 等。如果您有一个线性索引,例如 7,A(7) = 3,并且想要 [row , col] 形式的索引,你可以像这样使用 sub2ind

ind = 7
[row, col] = ind2sub(size(A), ind)
row =
     1
col =
     3

如果你想走另一条路,使用ind2sub:

ind = sub2ind(size(A),row,col)
ind =

     7

如果要使用线性索引并得到结果 [1 2 3 4 5 ...],则必须转置矩阵:

B = A.'
B(1:4)
B =
     1     5     9
     2     6    10
     3     7    11
     4     8    12
ans =
     1     2     3     4

ind2sub的逻辑是:

告诉ind2sub一个矩阵有多少行和列,即size(A)。在本例中是 3 和 4。然后给 ind2sub 一个线性索引(你似乎知道它是什么)。那么它基本上做的是:

row = mod((ind-1), size(A,1))+1  %// size(A,1) is the number of rows
row =
     1
col = ceil(ind/size(A,1))  %// size(A,2) is the number of columns
col =
     3

用最后一个例子来说明:

A = zeros(2,3);
ind = 1:numel(A);
row = mod((ind-1), size(A,1))+1 
col = ceil(ind/size(A,1))
row =
     1     2     1     2     1     2
col =
     1     1     2     2     3     3

[row col] = ind2sub(size(A),ind)
row =
     1     2     1     2     1     2
col =
     1     1     2     2     3     3