在每行中获取不同的列

时间:2012-10-01 11:37:42

标签: matlab matrix row

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

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

输出应该产生:

out = [2;4;5]

简而言之:A是矩阵,B具有每行列数的索引。如何在不使用循环的情况下执行此操作(如果可能的话)?

2 个答案:

答案 0 :(得分: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))和列号给出了一个线性索引乙

答案 1 :(得分:8)

你可以通过diag(A(:,B))来做,但是有一个循环,但只是隐含的。我不知道怎么做没有任何循环。