How to call vector in matrix with condition

1 view (last 30 days)
Let's say:
A=[7 2 3 50;4 5 6 15;1 8 9 20;1 1 1 30]
A= 7 2 3 50
4 5 6 15
1 8 9 20
1 9 8 30
B=[1; 7]
B=[1
7]
Question: I wanna call only vector in column 4 of matrix A with the condition is: the value of matrix B have the same value of vector in 1st column of matrix A?
I hope the result like that:
result=[20; 30;50]
result=[20
30
50]
i try :
result=A(ismember(A(:,1),B,'rows'),4);
But, result=[50; 20;30]% it is not in order of vector in matrix B ????

Accepted Answer

Bruno Luong
Bruno Luong on 14 Dec 2018
[tf,loc] = ismember(A(:,1),B);
r = sortrows([loc(tf),A(tf,4)],1);
r(:,2)
ans =
20
30
50

More Answers (2)

Jan
Jan on 14 Dec 2018
[m, loc] = ismember(A(:,1), B);
R = A(m,4);
[~, q] = sort(loc(m));
R = R(q)
  1 Comment
Jan
Jan on 14 Dec 2018
Sorting loc(m) and using the index is exactly what happens inside sortrows([loc(m), A(m,4)], 1), so this answer is almost identical to Bruno's.

Sign in to comment.


KSSV
KSSV on 14 Dec 2018
Edited: KSSV on 14 Dec 2018
k = A(A(:,1)==B(1),4)
l = A(A(:,1)==B(2),4)
Or
[idx,ia] = ismember(A(:,1),B)
iwant = A(idx,4)
  1 Comment
ha ha
ha ha on 14 Dec 2018
Edited: ha ha on 14 Dec 2018
Thanks @KSSV
But, i follow your code, and the result is :
result=[50; 20;30]% it is not in order of vector in matrix B ????
It is NOT what I want(bz it is not in order).

Sign in to comment.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!