440,171 Members | 776 Online Need help? Post your question and get tips & solutions from a community of 440,171 IT Pros & Developers. It's quick & easy.

# matching elements of numeric arrays

 P: n/a I have two one-dimensional Numeric arrays, and I need to know the indices in the second array of elements from the first. so if i had: a=array([2,4,6]) b=array([2,3,4,5,6]) i want a function match that does this: match(a,b) array([0,2,4]) i have something that works, but it involves converting things to lists and using 'in', and it is rather slow. if someone could point me to a better solution, i would appreciate it. Oct 13 '05 #1
3 Replies

 P: n/a wrote in news:11**********************@g49g2000cwa.googlegr oups.com... I have two one-dimensional Numeric arrays, and I need to know the indices in the second array of elements from the first. so if i had: a=array([2,4,6]) b=array([2,3,4,5,6]) i want a function match that does this: match(a,b) array([0,2,4]) i have something that works, but it involves converting things to lists and using 'in', and it is rather slow. if someone could point me to a better solution, i would appreciate it. I have no idea about Numeric array module, so I will use the built-in Python one for it (how about the speed if compared to Numeric arrays?): from array import array a = array('I', [2,4,6]) b = array('I', [2,3,4,5,6]) def match(a,b): retVal = array('I') for item in a: retVal.append(b.index(item)) return retVal print a print b print str(match(a,b)) Outputs: array('I', [2L, 4L, 6L]) array('I', [2L, 3L, 4L, 5L, 6L]) array('I', [0L, 2L, 4L]) Claudio Oct 13 '05 #2

 P: n/a da************@gmail.com wrote: I have two one-dimensional Numeric arrays, and I need to know the indices in the second array of elements from the first. so if i had: a=array([2,4,6]) b=array([2,3,4,5,6]) i want a function match that does this:match(a,b) array([0,2,4]) i have something that works, but it involves converting things to lists and using 'in', and it is rather slow. if someone could point me to a better solution, i would appreciate it. If b is sorted, then you can use Numeric.searchsorted(b, a). Otherwise: In : import Numeric as N In : a = N.array([2,4,6]) In : b = N.array([2,3,4,5,6]) In : match = N.equal.outer(a, b) In : idx = N.compress(N.sum(match), N.arange(len(b))) In : idx Out: array([0, 2, 4]) -- Robert Kern rk***@ucsd.edu "In the fields of hell where the grass grows high Are the graves of dreams allowed to die." -- Richard Harter Oct 14 '05 #3

 P: n/a Thanks a lot. It was this equal.outer idea that I was missing. Oct 14 '05 #4

### This discussion thread is closed

Replies have been disabled for this discussion. 