MATLAB Answers

How to call vector in matrix with condition

5 views (last 30 days)
ha ha
ha ha on 14 Dec 2018
Commented: Jan on 14 Dec 2018
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 ????

  0 Comments

Sign in to comment.

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

  0 Comments

Sign in to comment.

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
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.

Tags