9

I have two 1D arrays and I want to find out if an element in one array occurs in another array or not.

For example:

import numpy as np
A = np.array([ 1, 48, 50, 78, 85, 97])
B = np.array([38, 43, 50, 62, 78, 85])

I want:

C = [2,3,4] # since 50 in second array occurs in first array at index 2, 
            # similarly 78 in second array occurs in first array in index 3,
            # similarly for 85, it is index 4

I tried:

accuracy = np.searchsorted(A, B)

But it gives me undesirable results.

1

3 Answers 3

15

You could use np.where and np.in1d:

>>> np.where(np.in1d(A, B))[0]
array([2, 3, 4])

np.in1d(A, B) returns a boolean array indicating whether each value of A is found in B. np.where returns the indices of the True values. (This will also work if your arrays are not sorted.)

Sign up to request clarification or add additional context in comments.

Comments

7

You should start with np.intersect1d, which finds the set intersection (common elements) between arrays.

In [5]: np.intersect1d(A, B)
Out[5]: array([50, 78, 85])

To get the desired output from your question, you can then use np.searchsorted with just those items:

In [7]: np.searchsorted(A, np.intersect1d(A, B))
Out[7]: array([2, 3, 4])

Comments

0

Since version 2.0 of numpy function in1d is deprecated. Recommendation is to use isin instead:

np.where(np.isin(A, B))[0]
(array([2, 3, 4]),)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.