我想从矩阵的每一行中得到不同的列。例如:
A = [1,2;1,4;5,2]
B = [2;2;1]
输出应产生:
out = [2;4;5]
简而言之:A
是矩阵,并且B
具有每行列的索引。我怎样才能在不使用循环的情况下做到这一点(如果可能的话)?
您可以使用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 中给出的列号生成一个线性索引。
你可以这样做diag(A(:,B))
,但是有一个循环,但只是隐式的。我不知道如何在没有任何循环的情况下做到这一点。