Finding If a sub-array (1d) is there in a 2d array

9 views (last 30 days)
Hi,
Lets suppose we have
array2D = [1 2 3; 4 5 6; 6 7 8] how to find out cheaply that it contain "4 5 6" in a position?
I have a main dataset, which is like 10M samples and I have a test set conatining like 2M samples. The test set is a sub set of main set (infact randomly selected elements of main array). I need to find the index of each test sample into the main data file.
Pls give me a solution, as I am not able to do it cheaply yet.
Thanks in advance

Accepted Answer

Paulo Silva
Paulo Silva on 12 Jun 2011
For the example provided
array2D = [1 2 3; 4 5 6; 6 7 8]
v1= [4 5 6]
[tf,loc]=intersect(array2D,v1,'rows')
loc gives you the row number where you have v1 inside array2D, you might also take a look at the ismember function for similar purposes
  2 Comments
musi
musi on 12 Jun 2011
Many thanks, it is v good.
Just one comment, I only need indexes, which methid wld be fast?
I think is member can solve problem for all test samples in one go, and might be fast.
cheer
Paulo Silva
Paulo Silva on 12 Jun 2011
after you get the row number you can get all the index values, this is just for your example:
as=size(array2D)
idx=loc:as(1):numel(array2D) %all the index values
The code only works if there's just one row equal to v, if there are more use arrayfun

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices 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!