7

我想从矩阵的每一行中得到不同的列。例如:

A = [1,2;1,4;5,2]
B = [2;2;1]

输出应产生:

out = [2;4;5]

简而言之:A是矩阵,并且B具有每行列的索引。我怎样才能在不使用循环的情况下做到这一点(如果可能的话)?

4

2 回答 2

8

您可以使用sub2ind将 (i,j) 索引转换为矩阵 A 中的线性索引

idx = sub2ind(size(A), 1:size(A, 1), B');
A(idx)

ans =

 2     4     5

假设向量 B 的条目与 A 中的行数一样多,则该方法有效。在上面的 sub2ind 中,为每对后续行号 (1:size(A, 1)) 和 B 中给出的列号生成一个线性索引。

于 2012-10-01T12:02:58.817 回答
8

你可以这样做diag(A(:,B)),但是有一个循环,但只是隐式的。我不知道如何在没有任何循环的情况下做到这一点。

于 2012-10-01T12:03:43.650 回答