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));