Reputation: 57
I have two matrix A and B,the first row of matrix A(1,:)=[1 2] refer to the number of row and column matrix B(1,2)=21,now I want to do this work for another rows of matrix A without loops?
A=[1 2;2 3;1 3;3 3];
B=[1 21 34;45 65 87;4 55 66];
for i=1:4
d(i,:)=B(A(i,1),A(i,2))
end
d =[21; 87;34;66]
Upvotes: 0
Views: 104
Reputation: 1006
I guess the following code must be work for you:
A=[1 2;2 3;1 3;3 3];
B=[1 21 34;45 65 87;4 55 66];
d=diag(B(A(:,1),A(:,2)))
Upvotes: 2
Reputation: 19689
Use sub2ind
to get linear indices of the required values of B
and then use these indices to retrieve those values.
d = B(sub2ind(size(B), A(:,1), A(:,2)));
>> d
d =
21
87
34
66
Upvotes: 4