Re:[SciPy-user] Way to get values which are the same on two arrays
Hi José, I remember reading your question last week. Coincidently, I have just written a function to find the intersection of 2 sets (using a histogram function) for my own work. I'm not sure if it is the most efficient method, but it seems to work. from Numeric import * def histogram(a, bins): """counts the number of values in a that fall into each of the bins in bin""" n = searchsorted(sort(a),bins) n = concatenate([n,[len(a)]]) return asarray(n[1:]-n[:-1]) def intersection(a,b): """takes two 1D arrays and returns an array of values that are in both arrays""" if a.typecode() != 'l' or b.typecode() != 'l': raise ValueError, "arrays must be of type Int" #make bins from intersection of ranges minab = max([minimum.reduce(a),minimum.reduce(b)]) maxab = min([maximum.reduce(a),maximum.reduce(b)]) # -> If either set is empty, or their ranges don't intersect if maxab < minab or maxab < 0: return None bins = arange(minab,maxab+1) return minab+nonzero(logical_and(histogram(a,bins),histogram(b,bins))) if __name__ == '__main__': a = array([1,2,3,4,6]) b = array([4,5,6,1,7]) print intersection(a,b) Hope this helps, Michael Sorich PhD Student School of Pharmaceutical, Molecular and Biomedical Sciences University of South Australia Email: michael.sorich@postgrads.unisa.edu.au mike_sorich@hotmail.com -------------------------------- Hi, I seem to remember a Numerical function that could produce the list of values (or array positions) which are common to two arrays. In other words: a1=[1,2,3,9,10] a2=[1,4,9,10] result is [1,9,10]. Browsing through the Numerical docs doesn't refresh my memory, so any kind souls? many thanks, José -- José L Gómez Dans PhD student Tel: +44 114 222 5582 Radar & Communications Group FAX; +44 870 132 2990 Department of Electronic Engineering University of Sheffield UK --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.408 / Virus Database: 230 - Release Date: 24/10/2002
participants (1)
-
Michael Sorich