source: trunk/SRC/Matrix/different.pro @ 163

Last change on this file since 163 was 163, checked in by navarro, 18 years ago

header improvements : type of parameters and keywords, default values, spell checking + idldoc assistant (IDL online_help)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 1.6 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5;
6; @file_comments
7; calculate the different elements of 2 matrix of positive whole numbers.
8;
9; @categories
10; Calculation
11;
12; @param a {in}{required} arrays of positive integers, which need
13;               not be sorted. Duplicate elements are ignored, as they have no
14;               effect on the result
15;
16; @param b {in}{required} see a
17;
18; @returns tableau
19;
20; @restrictions The empty set is denoted by an array with the first element equal to
21; -1.
22;
23; @restrictions These functions will not be efficient on sparse sets with wide
24; ranges, as they trade memory for efficiency. The HISTOGRAM function
25; is used, which creates arrays of size equal to the range of the
26; resulting set.
27;
28; @examples
29;
30;   a = [2,4,6,8]
31;   b = [6,1,3,2]
32;   different(a,b) = [ 4, 8]         ; Elements in A but not in B
33;
34; @history http://www.dfanning.com/tips/set_operations.html
35;
36; @version $Id$
37;
38;-
39;------------------------------------------------------------
40;------------------------------------------------------------
41;------------------------------------------------------------
42FUNCTION different, a, b 
43;
44  compile_opt idl2, strictarrsubs
45;
46
47   ; = a and (not b) = elements in A but not in B
48
49mina = Min(a, Max=maxa)
50minb = Min(b, Max=maxb)
51IF (minb GT maxa) OR (maxb LT mina) THEN RETURN, a ;No intersection...
52r = Where(Histogram(a, Min=mina, Max=maxa) $
53          *(1-Histogram(b, Min=mina, Max=maxa)), count)
54IF count eq 0 THEN RETURN, -1 ELSE RETURN, r + mina
55END
Note: See TracBrowser for help on using the repository browser.