在MATLAB中选择数组中的元素

时间:2013-04-09 17:29:26

标签: matlab

我有一个类似

的矩阵
A = 
[ 10 20;
  30 40;
  50 60 ]

我也有像

这样的矢量
idx = 
[ 2; 1; 1]

这意味着我想要

第一行中的第二列(= 20),

第二行中的第一列(= 30)和

第三行中的第一列(= 50)。

我怎样才能以[20; 30; 50]

2 个答案:

答案 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

现在使用一般数字,它将适合任何其他维度。