Re: setintersection [message #17128] |
Thu, 16 September 1999 00:00 |
Jonathan Joseph
Messages: 69 Registered: September 1998
|
Member |
|
|
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
|
|
|