我想訪問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循環。
我想訪問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循環。
使用下列內容:
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))] ;
這可以有效地使用linear index建有bsxfun
來完成:
result = A(bsxfun(@plus, B.', (C.'-1)*size(A,1)));
這種方法適用於訪問任何數量的列的A
(即任何數字o在B
和C
中的f行)。
它是如何工作:bsxfun
建立與期望的行和列索引,分別由B
和C
給出的線性指標。請注意,C.'-1
乘以size(A,1)
,因爲線性索引中的新列表示size(A,1)
的步驟。需要矩陣B
和C
的轉置,以便結果矩陣具有所需的形狀。
你能解釋一下代碼的工作原理嗎? – user12331 2014-09-21 19:07:47
@ user12331查看編輯答案。您應該熟悉線性索引的概念(請參閱我的答案中的鏈接)。觀察中間結果'bsxfun(@plus,B',(C'-1)* size(A,1))'以瞭解這個工作原理可能會有幫助 – 2014-09-21 22:03:03