Mercurial > repos > vipints > rdiff
comparison rDiff/src/tools/intersect.m @ 0:0f80a5141704
version 0.3 uploaded
author | vipints |
---|---|
date | Thu, 14 Feb 2013 23:38:36 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:0f80a5141704 |
---|---|
1 %## Copyright (C) 2000-2012 Paul Kienzle | |
2 %## Copyright (C) 2008-2009 Jaroslav Hajek | |
3 %## | |
4 %## This file is part of Octave. | |
5 %## | |
6 %## Octave is free software; you can redistribute it and/or modify it | |
7 %## under the terms of the GNU General Public License as published by | |
8 %## the Free Software Foundation; either version 3 of the License, or (at | |
9 %## your option) any later version. | |
10 %## | |
11 %## Octave is distributed in the hope that it will be useful, but | |
12 %## WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 %## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ... | |
14 % GNU | |
15 %## General Public License for more details. | |
16 %## | |
17 %## You should have received a copy of the GNU General Public ... | |
18 % License | |
19 %## along with Octave; see the file COPYING. If not, see | |
20 %## <http://www.gnu.org/licenses/>. | |
21 | |
22 function [c, ia, ib] = intersect (a, b, varargin) | |
23 | |
24 if (nargin < 2 || nargin > 3) | |
25 print_usage (); | |
26 end | |
27 | |
28 | |
29 if (isempty (a) || isempty (b)) | |
30 c = ia = ib = []; | |
31 else | |
32 ## form a and b into sets | |
33 if (nargout > 1) | |
34 [a, ja] = unique (a, varargin{:}); | |
35 [b, jb] = unique (b, varargin{:}); | |
36 else | |
37 a = unique (a, varargin{:}); | |
38 b = unique (b, varargin{:}); | |
39 end | |
40 | |
41 if (nargin > 2) | |
42 c = [a; b]; | |
43 [c, ic] = sortrows (c); | |
44 ii = find (all (c(1:end-1,:) == c(2:end,:), 2)); | |
45 c = c(ii,:); | |
46 len_a = rows (a); | |
47 else | |
48 c = [a(:); b(:)]; | |
49 [c, ic] = sort (c); ## [a(:);b(:)](ic) == c | |
50 if (iscellstr (c)) | |
51 ii = find (strcmp (c(1:end-1), c(2:end))); | |
52 else | |
53 ii = find (c(1:end-1) == c(2:end)); | |
54 end | |
55 c = c(ii); | |
56 len_a = length (a); | |
57 end | |
58 | |
59 if (nargout > 1) | |
60 ia = ja(ic(ii)); ## a(ia) == c | |
61 ib = jb(ic(ii+1) - len_a); ## b(ib) == c | |
62 end | |
63 | |
64 if (nargin == 2 && (size (b, 1) == 1 || size (a, 1) == 1)) | |
65 c = c.'; | |
66 end | |
67 end |