MATLAB索引问题

MATLAB索引问题,matlab,indexing,matrix,Matlab,Indexing,Matrix,例如,我有一个矩阵 A = [ 1 2 3; 4 5 6; 7 8 9] ; 以及一个大小为1x3的向量,它指定每行中的哪个元素是我要查找的元素,即如果 vector = [ 1 2 1 ] 然后输入所需的输出 [ 1 5 7 ] 由于1是第一行的第一个元素,5是第二行的第二个元素,7是第三行的第一个元素 我如何做到这一点?找不到内置函数来执行此操作,这让我很惊讶。首先,Matlab中的索引是从上到下的。 所以在你的例子中,A[1]=1,A[2]=4,A[3]=7 这就是说,在一个'上工作

例如,我有一个矩阵

A = [ 1 2 3; 4 5 6; 7 8 9] ;
以及一个大小为1x3的向量,它指定每行中的哪个元素是我要查找的元素,即如果

vector = [ 1 2 1 ]
然后输入所需的输出

[ 1 5 7 ]
由于
1
是第一行的第一个元素,
5
是第二行的第二个元素,
7
是第三行的第一个元素


我如何做到这一点?找不到内置函数来执行此操作,这让我很惊讶。

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

这就是说,在一个'上工作会更容易,因为它有点琐碎

B = A';

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

这有点难看,但diag(a(1:3,[1 2 1])会起作用。

MATLAB提供了将行/列下标转换为线性索引的功能:

>> 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
这是的一个变体,但没有转置(这也是中的基本功能):

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

 nRows = size(A,1);
 output = A((1:nRows)+nRows.*(vector-1));
从文档中可以看出:“A(:)是A的所有元素,被视为一列。”。为了理解索引,我做了同样的事情:diag(a(:,vector))'Related:
 nRows = size(A,1);
 output = A((1:nRows)+nRows.*(vector-1));