这是我经常发现自己试图解决的问题。我有以下内容:
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]
但这对我来说似乎不优雅。有单行吗?
答案 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))
虽然我不能告诉你有关表演的事情......