[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: setintersection
- Subject: Re: setintersection
- From: Jonathan Joseph <jj(at)scorpio.tn.cornell.edu>
- Date: Thu, 16 Sep 1999 11:14:30 -0400
- Newsgroups: comp.lang.idl-pvwave
- Organization: Cornell University
- References: <37DFD05C.4FFF@scorpio.tn.cornell.edu>
- Sender: verified_for_usenet(at)cornell.edu (jj21 on scorpio.tn.cornell.edu)
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:16584
Well, to answer my own question, if anyone's interested...
After thinking about it a bit, I was able to modify the
setintersection function to produce the desired result.
Like the other routines, it "operates on sets represented
by arrays of positive integers."
There's probably a way to make it more efficient, but here
it is.
;;
;; finds the indeces in sets <a> and <b> of elements
;; in the intersection of sets <a> and <b>
;;
pro iSetIntersection, a, b, ia=ia, ib=ib
;; use the full range
minab = min(a, MAX=maxa) < min(b, MAX=maxb)
maxab = maxa > maxb
;; If either set is empty return null sets
if minab lt 0 then begin
ia = -1
ib = -1
return
endif
;; find intersection
r = histogram(a, MIN=minab, MAX=maxab) < 1 and $
histogram(b, MIN=minab, MAX=maxab) < 1
;; indeces of elements in intersection
ia = where(r(a-minab) gt 0)
ib = where(r(b-minab) gt 0)
end
And here's the original setintersection
FUNCTION SetIntersection, a, b
minab = min(a, MAX=maxa) > min(b, MAX=maxb) ;Only need intersection of
ranges
maxab = maxa < maxb
;; If either set is empty, or their ranges don't intersect: result =
NULL.
if maxab lt minab or maxab lt 0 then return, -1
r = where((histogram(a, MIN=minab, MAX=maxab) ne 0) and $
(histogram(b, MIN=minab, MAX=maxab) ne 0), count)
if count eq 0 then return, -1 else return, r + minab
end
Jonathan Joseph wrote:
>
> Hi, I've grabbed the useful functions
>
> SetIntersection(a,b) ; Common elements
> SetUnion(a,b) ; Elements in either set
> SetDifference(a,b) ; Elements in A but not in B
>
> from David Fanning's web page
> http://www.dfanning.com/tips/set_operations.html
>
> But, what I really would like is a function
> that would return the indeces in set A (or B) of
> the intersection of A and B.
>
> Does anyone know an efficient way to get this, or
> will I have to resort to a loop?
>
> -Jonathan