我有一个二维数组(矩阵)及其数组(1D)表示,我想知道项目在矩阵中的x位置与相应项数组表示的索引之间的关系。
解释:让我们说我有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)来实现这个功能。
发布于 2015-01-19 06:45:38
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,并且希望在表单行中使用索引,那么您可以像这样使用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 4ind2sub的逻辑是:
告诉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 3https://stackoverflow.com/questions/28019086
复制相似问题