find row with certain values
Show older comments
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
Accepted Answer
More Answers (5)
Jan
on 20 Dec 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 Comment
the cyclist
on 20 Dec 2011
I think the "any" here should be over dimension 2, not dimension 1.
Malcolm Lidierth
on 20 Dec 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
on 20 Dec 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
on 20 Dec 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 Comment
Soyy Tuffjefe
on 27 Aug 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
on 20 Apr 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).
Categories
Find more on Data Type Identification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!