2013-05-13 114 views
1
sub2ind

假設我有一個矩陣AMATLAB使用矢量

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 

現在我選擇該矩陣的一個塊使用

A(1:2, 1:2) 

17 24 
23  5 

現在我需要通過(1給出的線性索引:2,1 ; 2)是(1 2 6 7)。使用sub2ind:

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

但是這個命令只返回(1 7)我該如何解決這個問題?

回答

3

假設你要選擇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 

您可能需要將其重塑成列向量pos(:),或與以reshape()呼叫一行。

+0

不幸的是,如果矩陣不是方形的,你的代碼將不起作用。 – blueSurfer 2013-05-13 22:46:11

+0

對不起我的錯,它完美的作品謝謝你 – blueSurfer 2013-05-13 23:24:08

0

您需要指定4個下標:[1 1],[2 1],[1 2][2 2]

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

ans = 

    1  2  6  7 
+0

好吧..但我只有(1:2,1; 2)。你寫的是我的到達點。 – blueSurfer 2013-05-13 20:48:54

+0

所以你想把'[1:2],[1:2]'變成'[1 2 1 2],[1 1 2 2]'? – 2013-05-13 20:50:36

+0

準確:)假設我有x和y,並在我的程序中使用它們進行索引。 – blueSurfer 2013-05-13 20:53:58