MATLAB sub2ind using vectors

懵懂的女人 提交于 2019-12-11 07:26:12

问题


Suppose I have a matrix A

A = magic(5)

17    24     1     8    15
23     5     7    14    16
 4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

Now I select a block of this matrix using

A(1:2, 1:2)

17    24
23     5

Now I need the linear index given by (1:2, 1;2) which are (1 2 6 7). Using sub2ind:

sub2ind(size(A),[1:2], [1:2])

But this command returns just (1 7) how can I solve this?


回答1:


Suppose you want to select A(1:2,2:3):

% Row and column indexes
rind = 1:2;
cind = 2:3;

pos  = bsxfun(@plus,rind', size(A,2)*(cind-1));

pos =
     6    11
     7    12

You might want to reshape it into a column vector pos(:), or in one line with a call to reshape().




回答2:


You need to specify the 4 subscripts: [1 1], [2 1], [1 2] and [2 2].

>> sub2ind(size(A),[1 2 1 2], [1 1 2 2])

ans =

     1     2     6     7


来源:https://stackoverflow.com/questions/16530668/matlab-sub2ind-using-vectors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!