By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,171 Members | 776 Online
Bytes IT Community
+ Ask a Question
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
Share this Question
Share on Google+
3 Replies


P: n/a
<da************@gmail.com> 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 [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

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.