2014-09-21 26 views
2

我想訪問matlab中數組的特定塊。假設我的數組A的大小是10x10。在matlab中訪問數組的特定塊

現在我有兩個變量可以說

B = [ 1 2 3; 4 5 6] 
C = [1;2] 

然後我想訪問1,2,3行A的第一個關口的4,5,6排A的第2個關口,使我得到的這個大小爲3x2的結果數組。我如何在matlab中高效地使用它,而不使用for循環。

回答

1

使用下列內容:

A(B(1,:),C(1,1)) 

A(B(1,:),C(2,1)) 

最後3X2作爲

D = [A(B(1,:),C(1,1)) A(B(1,:),C(2,1))] ; 
1

這可以有效地使用linear index建有bsxfun來完成:

result = A(bsxfun(@plus, B.', (C.'-1)*size(A,1))); 

這種方法適用於訪問任何數量的列的A(即任何數字o在BC中的f行)。

它是如何工作bsxfun建立與期望的行和列索引,分別由BC給出的線性指標。請注意,C.'-1乘以size(A,1),因爲線性索引中的新列表示size(A,1)的步驟。需要矩陣BC的轉置,以便結果矩陣具有所需的形狀。

+0

你能解釋一下代碼的工作原理嗎? – user12331 2014-09-21 19:07:47

+0

@ user12331查看編輯答案。您應該熟悉線性索引的概念(請參閱我的答案中的鏈接)。觀察中間結果'bsxfun(@plus,B',(C'-1)* size(A,1))'以瞭解這個工作原理可能會有幫助 – 2014-09-21 22:03:03