No BSD License  

Highlights from
Intersect2

5.0

5.0 | 1 rating Rate this file 15 Downloads (last 30 days) File Size: 1.56 KB File ID: #19359

Intersect2

by Suri Like

 

28 Mar 2008 (Updated 31 Mar 2008)

Finds the intersection (common elements) of several (more than two) arrays

| Watch this File

File Information
Description

In MATLAB, there is a command called "intersect", which finds the set intersection (common elements) of two vectors. However, this command doesn't work if I want to compare more than two vectors and find out their intersection. Therefore, I decided to write this function which is called "intersect2". It can find the common elements of any number of 1D numeric arrays of the same or different sizes and returns an array consisting of only those elements.

INPUT:
The input variable "cell" has to be a cell array, with each cell occupied by an 1D numeric array. For example, if you want to find the intersection (common elements) of the following three arrays
       a = [ 1 3 4 6 8 9 ];
       b = [ 3 1 0 8 6 4 ];
       c = [ 7 8 1 9 3 4 ];,
you need to first put all of them into a cell array, i.e.
       cell = {a, b, c};
Then you could use "cell" as the input variable to this function, i.e.
       result = intersect2(cell);
   
OUTPUT:
The output of this function is simply an array consisting of elements that are common to all the arrays stored in "cell". For the particular case in the example above, the output would be
       result = [ 1 3 4 8 ];
Also note that the numbers in the result are sorted in ascending order.

MATLAB release MATLAB 7.4 (R2007a)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (3)
08 May 2008 Thierry Dalon

I would code this using recursivity:
function res=intersectall(c)

if length(c) == 2
    res = intersect(c{1}, c{2});
return
end

res = intersect(c{1},intersectall(c(2:end)));

24 Jul 2009 Julia

I've submitted a script that fulfills the same function as this one, using a recursive scheme:
intersect several arrays
http://www.mathworks.com/matlabcentral/fileexchange/24835

There is a similar one for the union of several arrays:
http://www.mathworks.com/matlabcentral/fileexchange/24834

27 Mar 2012 Ulrik

Thanks..
but I would change the code a bit:

n = numel(cell);
if n == 2
    result = intersect(cell{1}, cell{2});
elseif (n > 2 && rem(n,2) == 0)
    for i = 1:(n/2)
        intersections{1, i} = intersect(cell{i}, cell{n-i+1});
    end
elseif (n > 2 && rem(n,2) == 1)
    for i = 1:((n-1)/2)
        intersections{1, i} = intersect(cell{i}, cell{n-i+1});
    end
        intersections{1, i+1} = cell{(n+1)/2};
else
    error('You need at least two arrays as inputs');
end

if n > 2
    result = intersect2(intersections);
end

Please login to add a comment or rating.
Tag Activity for this File
Tag Applied By Date/Time
intersection Suri Like 22 Oct 2008 09:55:36
common Suri Like 22 Oct 2008 09:55:36
intersect Suri Like 22 Oct 2008 09:55:36
mathematics Suri Like 22 Oct 2008 09:55:36
intersect Rhys 11 Jun 2010 09:59:22
common Stanislav 14 Jul 2011 23:14:21

Contact us at files@mathworks.com