# Finding indices of matches of one array in another array

Posted on

### Question :

Finding indices of matches of one array in another array

I have two numpy arrays, A and B. A conatains unique values and B is a sub-array of A.
Now I am looking for a way to get the index of B’s values within A.

For example:

``````A = np.array([1,2,3,4,5,6,7,8,9,10])
B = np.array([1,7,10])
# I need a function fun() that:
fun(A,B)
>> 0,6,9
``````

You can use `np.in1d` with `np.nonzero`

``````np.nonzero(np.in1d(A,B))
``````

You can also use `np.searchsorted`, if you care about maintaining the order –

``````np.searchsorted(A,B)
``````

For a generic case, when `A` & `B` are unsorted arrays, you can bring in the `sorter` option in `np.searchsorted`, like so –

``````sort_idx = A.argsort()
out = sort_idx[np.searchsorted(A,B,sorter = sort_idx)]
``````

I would add in my favorite `broadcasting` too in the mix to solve a generic case –

``````np.nonzero(B[:,None] == A)
``````

Sample run –

``````In : A
Out: array([ 7,  5,  1,  6, 10,  9,  8])

In : B
Out: array([ 1, 10,  7])

In : sort_idx = A.argsort()

In : sort_idx[np.searchsorted(A,B,sorter = sort_idx)]
Out: array([2, 4, 0])

In : np.nonzero(B[:,None] == A)
Out: array([2, 4, 0])
``````

Have you tried `searchsorted`?

``````A = np.array([1,2,3,4,5,6,7,8,9,10])
B = np.array([1,7,10])

A.searchsorted(B)
# array([0, 6, 9])
``````

Just for completeness: If the values in `A` are non negative and reasonably small:
``````lookup = np.empty((np.max(A) + 1), dtype=int)