P: n/a

I have two onedimensional 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.  
Share this Question
P: n/a

<da************@gmail.com> wrote in
news:11**********************@g49g2000cwa.googlegr oups.com... I have two onedimensional 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 builtin 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  
P: n/a
 da************@gmail.com wrote: I have two onedimensional 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 [28]: import Numeric as N
In [29]: a = N.array([2,4,6])
In [30]: b = N.array([2,3,4,5,6])
In [31]: match = N.equal.outer(a, b)
In [32]: idx = N.compress(N.sum(match), N.arange(len(b)))
In [33]: idx
Out[33]: 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  
P: n/a

Thanks a lot. It was this equal.outer idea that I was missing.   This discussion thread is closed Replies have been disabled for this discussion.   Question stats  viewed: 2072
 replies: 3
 date asked: Oct 13 '05
