find row with certain values
Afficher commentaires plus anciens
Hello I am looking for a (simple) way to get the index of a row in which two (or n) values exist
example: looking for 4 and 5 in
[1 5 6; 5 4 3; 9 4 2]
will give me 2, because only row 2 has both 4 and 5 in it
Thanks
Daniel
Réponse acceptée
Plus de réponses (5)
Jan
le 20 Déc 2011
X = [1 5 6; 5 4 3; 9 4 2]
index = and(any(X == 4, 2), any(X == 5, 2));
[EDITED: Apply ANY along 2nd dim, thanks Cyclist!]
1 commentaire
the cyclist
le 20 Déc 2011
I think the "any" here should be over dimension 2, not dimension 1.
Malcolm Lidierth
le 20 Déc 2011
>> x=[1 5 6; 5 4 3; 9 4 2];
>> [a b]=find(x==4);
>> [c d]=find(x==5);
>> intersect(a,c)
ans =
2
the cyclist
le 20 Déc 2011
Trust but verify this code:
x = [1 5 6; 5 4 3; 9 4 2]
want(1,1,:) = [4 5];
indexToDesiredRows = all(any(bsxfun(@eq,x,want),2),3)
rowNumbers = find(indexToDesiredRows)
Sean de Wolski
le 20 Déc 2011
How about ismember with a for-loop?
doc ismember
Example
A = [1 5 6; 5 4 3; 9 4 2];
want = [4 5];
szA = size(A,1);
idx = false(szA,1);
for ii = 1:szA
idx(ii) = all(ismember(want,A(ii,:)));
end
idx will be a logical vector of rows with 4 and 5. If you want the numeric values:
find(idx)
This will be the most scalable method if say you want 10 different numbers to be present in each row. Calling any/ intersect / all that many times and/or using that many dimensions is not really feasible.
1 commentaire
Soyy Tuffjefe
le 27 Août 2019
Suppose that A = [1 5 6 13 22; 9 5 4 6 37; 7 1 4 22 37];
and want = [5 6; 1 22; 4,37];
Please, Can you modify your code for find two o more rows; or any idea for me to try this job with your code I have a want matriz of 100x4 and A matrix of 1000x5 order.
Thanks
Ankit
le 20 Avr 2013
>> x = [1 2 3 4 1 2 2 1]; find(sum(bsxfun(@eq,x',[1:3]),2)==1) ans =
1
2
3
5
6
7
8
Similar things can be done for an array rather than just a vector (x above).
Catégories
En savoir plus sur Data Type Identification dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!