2012-10-01 21 views
6

我想從矩陣的每一行中獲取不同的列。例如:在每一行中獲取不同的列

A = [1,2;1,4;5,2] 
B = [2;2;1] 

輸出應該產生:

out = [2;4;5] 

因此,在短期:A是矩陣和B具有用於每行colums索引。我怎樣才能做到這一點,而不使用循環(如果可能的話)?

回答

7

可以使用sub2ind於(i,j)的索引轉換爲矩陣線性指數阿

idx = sub2ind(size(A), 1:size(A, 1), B'); 
A(idx) 

ans = 

2  4  5 

,工程假設矢量B具有儘可能多的條目,因爲有在A.行在上述sub2ind爲B中給出的每一對後續行號(1:尺寸(A,1))和列號生成一個線性索引。

+0

這很好,謝謝。我必須查閱sub2ind的文檔以完全理解這是如何工作的。 – Tim

7

您可以通過diag(A(:,B))執行此操作,但存在循環但僅隱含。我不知道如何去做,沒有任何循環。

+1

就像使用sub2ind的答案一樣,這也完美地實現了這個技巧。 – Tim

+1

這個方法當然是有效的,但是在創建N×N矩陣(A(:,B))的方式中。這是相當的開銷,當你真正想要的最後是一個大小爲N. – angainor

+1

的矢量是的,這就是爲什麼我選擇你的答案是實際答案:-)。 – Tim