如何找到相对于矩阵位置的数组索引?
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) = 1
、A(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
我有一个二维数组(矩阵)和它的数组(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) = 1
、A(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