使用vector来选择matlab数组的列

时间:2014-10-21 15:35:00

标签: matlab matrix indexing

这是我经常发现自己试图解决的问题。我有以下内容:

A = [1 2;
     3 4;
     5 6;
     7 8;
     9 10];

B = [1,2,1,2,2];

在A的每一行(i)上,我想返回B(i)中指定的列的值。我目前使用循环来解决问题:

result = zeros(size(B));
for i=1:length(B)
    result(i) = A(i,B(i));
end

结果= [1 4 5 8 10]

但这对我来说似乎不优雅。有单行吗?

1 个答案:

答案 0 :(得分:2)

您可以使用sub2ind获得正确的线性索引:

rows = (1:numel(B))'
cols = B(:);
ind = sub2ind(size(A), rows, cols);
A(ind)

或单行

A(sub2ind(size(A), (1:numel(B))', B(:)))

或更优雅的方法(取自2nd answer to the duplicate question

diag(A(:,B))

虽然我不能告诉你有关表演的事情......