### 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
```

##
Answer #1:

You can use `np.in1d`

with `np.nonzero`

–

```
np.nonzero(np.in1d(A,B))[0]
```

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)[1]
```

Sample run –

```
In [125]: A
Out[125]: array([ 7, 5, 1, 6, 10, 9, 8])
In [126]: B
Out[126]: array([ 1, 10, 7])
In [127]: sort_idx = A.argsort()
In [128]: sort_idx[np.searchsorted(A,B,sorter = sort_idx)]
Out[128]: array([2, 4, 0])
In [129]: np.nonzero(B[:,None] == A)[1]
Out[129]: array([2, 4, 0])
```

##
Answer #2:

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])
```

##
Answer #3:

Just for completeness: If the values in `A`

are non negative and reasonably small:

```
lookup = np.empty((np.max(A) + 1), dtype=int)
lookup[A] = np.arange(len(A))
indices = lookup[B]
```