首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到相对于矩阵中位置的数组索引?

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

Stack Overflow用户
提问于 2015-01-19 06:33:11
回答 1查看 1.6K关注 0票数 0

我有一个二维数组(矩阵)及其数组(1D)表示,我想知道项目在矩阵中的x位置与相应项数组表示的索引之间的关系。

解释:让我们说我有3x4大小的矩阵:

代码语言:javascript
复制
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)来实现这个功能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-19 06:45:38

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

代码语言:javascript
复制
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,并且希望在表单行中使用索引,那么您可以像这样使用sub2ind

代码语言:javascript
复制
ind = 7
[row, col] = ind2sub(size(A), ind)
row =
     1
col =
     3

如果您想走另一条路,请使用ind2sub

代码语言:javascript
复制
ind = sub2ind(size(A),row,col)
ind =

     7

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

代码语言:javascript
复制
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一个线性索引(你似乎知道什么是)。那么它所做的基本上是:

代码语言:javascript
复制
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

为了用最后一个例子来说明:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28019086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档