我有一个类似
的矩阵A =
[ 10 20;
30 40;
50 60 ]
我也有像
这样的矢量idx =
[ 2; 1; 1]
这意味着我想要
第一行中的第二列(= 20),
第二行中的第一列(= 30)和
第三行中的第一列(= 50)。
我怎样才能以[20; 30; 50]
答案 0 :(得分:1)
您可以使用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)
不超过矩阵行数。
答案 1 :(得分:0)
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
现在使用一般数字,它将适合任何其他维度。