matching elements of numeric arrays

D

daniel.neilson

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:
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.
 
R

Robert Kern

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:


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
(e-mail address removed)

"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter
 
C

Claudio Grondi

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:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top