我有一个矩阵
A =
[ 10 20;
30 40;
50 60 ]
我也有一个像
idx =
[ 2; 1; 1]
这意味着我想要
第一行的第二列 (=20),
第二行的第一列 (=30),以及
第三行的第一列 (=50)。
我怎样才能得到一个带有 [20; 的向量?30; 50]?
我有一个矩阵
A =
[ 10 20;
30 40;
50 60 ]
我也有一个像
idx =
[ 2; 1; 1]
这意味着我想要
第一行的第二列 (=20),
第二行的第一列 (=30),以及
第三行的第一列 (=50)。
我怎样才能得到一个带有 [20; 的向量?30; 50]?
您可以使用SUB2IND功能;
result = A(sub2ind(size(A),(1:numel(idx))',idx));
对于一些性能改进,您可以替换 SUB2IND 手动计算线性索引:
linidx = (1:numel(idx))' + (idx - 1).*size(A,1);
result = A(linidx);
在任何情况下,请确保numel(idx)
不超过矩阵行数。
A = [ 10 20; 30 40; 50 60 ]
idx = [ 2; 1; 1]
t =(idx==2)*2 + idx
t1 = (idx==1)
A( t+ (t1 .* [0:2]'))
输出
ans =
20
30
50
现在使用通用数字,它将适合任何其他尺寸。