How to call vector in matrix with condition

1 Ansicht (letzte 30 Tage)
ha ha
ha ha am 14 Dez. 2018
Kommentiert: Jan am 14 Dez. 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 ????

Akzeptierte Antwort

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

Weitere Antworten (2)

Jan
Jan am 14 Dez. 2018
[m, loc] = ismember(A(:,1), B);
R = A(m,4);
[~, q] = sort(loc(m));
R = R(q)
  1 Kommentar
Jan
Jan am 14 Dez. 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.

Melden Sie sich an, um zu kommentieren.


KSSV
KSSV am 14 Dez. 2018
Bearbeitet: KSSV am 14 Dez. 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 Kommentar
ha ha
ha ha am 14 Dez. 2018
Bearbeitet: ha ha am 14 Dez. 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).

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by