MATLAB索引问题

时间:2011-01-30 10:59:49

标签: matlab indexing matrix

我有一个矩阵,例如

A = [ 1 2 3; 4 5 6; 7 8 9] ;

和一个大小为1x3的向量,它指定每行中哪个元素是我正在寻找的元素 - 即如果

vector = [ 1 2 1 ]

然后所需的输出是

[ 1 5 7 ]

因为1是第1行中的第1个元素,5是第2行中的2',7是第1行第3行中的元素。

我如何实现这一目标?无法找到内置功能来做到这一点,这让我感到惊讶。

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

首先,Matlab中的索引从上到下 所以在你的情况下 A [1] = 1,A [2] = 4,A [3] = 7

也就是说,使用A'会更容易,因为它有点琐碎。

B = A';

B((vector + [0:2].* 3))

答案 2 :(得分:5)

这有点难看,但是diag(A(1:3,[1 2 1]))会做到这一点。

答案 3 :(得分:0)

以下是Yochai's answer的变体但没有转置(这基本上也是SUB2INDAmro's answer所做的):

 output = A((1:3)+3.*(vector-1));

或者对于任意大小的数组A

 nRows = size(A,1);
 output = A((1:nRows)+nRows.*(vector-1));