0

我有一个矩阵

A = 
[ 10 20;
  30 40;
  50 60 ]

我也有一个像

idx = 
[ 2; 1; 1]

这意味着我想要

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

第二行的第一列 (=30),以及

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

我怎样才能得到一个带有 [20; 的向量?30; 50]?

4

2 回答 2

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)不超过矩阵行数。

于 2013-04-09T17:58:47.177 回答
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

现在使用通用数字,它将适合任何其他尺寸。

于 2013-04-09T17:34:42.837 回答