矩阵的子向量,列索引由向量给出

  • 本文关键字:向量 索引 matlab
  • 更新时间 :
  • 英文 :


我有一个矩阵a,它看起来像这样:

A = [ 5 6 ; 7 8; 9 10 ]
A =
5     6
7     8
9    10

然后是一个向量e,它指示我想为每行选择哪一列:

e = [ 1 ; 2 ; 1]

解释为,从A的第1行,我想选择第一列;从第2行到第2行;从第3行再次到第1行。

我想我会做

A(e)

它给出

A(e)
ans =
5
7
5

而我想要的是

5
8
9

我如何才能最有效地做到这一点?我的实际矩阵包含近100万行,所以for循环不是一个选项。非常感谢。

这里有两个选项。

MATLAB的sub2in从行&线性索引的列下标索引:

linear_indices = sub2ind(size(A), (1:size(A,1))', e);
A(linear_indices)

自己计算:

linear_indices = (1:size(A,1))' + (e-1)*size(A,1);
A(linear_indices)

使用arrayfun有一种简单的方法,它需要两个参数:从1到3的行索引和列索引e

arrayfun( @(i,j) A(i,j) , (1:size(A,1))' , e ) 

我认为这个答案和@marsei的优秀答案是一样的,但为了完整性,我无论如何都会添加这个:

A = [ 5 6 ; 7 8; 9 10 ];
e = [ 1 ; 2 ; 1];
for i=1:length(e)
B(i)=A(i,e(i));
end
>> B
B =
5     8     9

请注意,这将返回一个行向量,因此还需要使用B'进行转置,或者通过在使用B=nan(size(e));的循环之前进行预分配。

相关内容

  • 没有找到相关文章

最新更新