我有一個矩陣,例如MATLAB索引問題
A = [ 1 2 3; 4 5 6; 7 8 9] ;
和大小1×3的向量指定每一行中哪一個元素是我正在尋找一個 - 即如果
vector = [ 1 2 1 ]
然後期望的輸出是
[ 1 5 7 ]
因爲1
是第1'行中的第1'元件,5
是第2行中的第2位,7
是第3行中的第1位元素。
我該如何做到這一點?找不到內置函數來做到這一點,這讓我感到驚訝。
我有一個矩陣,例如MATLAB索引問題
A = [ 1 2 3; 4 5 6; 7 8 9] ;
和大小1×3的向量指定每一行中哪一個元素是我正在尋找一個 - 即如果
vector = [ 1 2 1 ]
然後期望的輸出是
[ 1 5 7 ]
因爲1
是第1'行中的第1'元件,5
是第2行中的第2位,7
是第3行中的第1位元素。
我該如何做到這一點?找不到內置函數來做到這一點,這讓我感到驚訝。
首先,Matlab中的索引自上而下。
你的情況 所以A [1] = 1,A [2] = 4,A [3] = 7
這就是說,它會更容易在工作」,因爲它的多一點不重要的。
B = A';
B((vector + [0:2].* 3))
從文檔:*「A( :)是A的所有元素,被視爲單個列。「*。作爲一個側面說明,以瞭解索引。 – zellus 2011-01-30 11:46:52
這有點難看,但diag(A(1:3,[1 2 1]))
將做的伎倆。
我做了同樣的事情:diag(A(:,vector))' – 2011-01-31 03:45:26
MATLAB提供SUB2IND功能行/列標轉換爲線性指標:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> idx = sub2ind(size(A),1:3,[1 2 1]); %# rows: [1 2 3], cols: [1 2 1]
>> A(idx)
1 5 7
這裏是Yochai's answer的變化,但沒有轉置(這也基本上是SUB2IND並在Amro's answer):
output = A((1:3)+3.*(vector-1));
或者對於任意大小的排列A
:
nRows = size(A,1);
output = A((1:nRows)+nRows.*(vector-1));
相關:[使用下標而不使用sub2ind訪問值](http://stackoverflow.com/questions/1146719/accessing-values-using-subscripts-without-using-sub2ind) – gnovice 2011-01-31 15:46:26