Joran Beasley
Joran Beasley

Reputation: 113988

Numpy mask based on if a value is in some other list

I have searched high and low and just can't find a way to do it. (It's possible I was searching for the wrong terms.)

I would like to create a mask (eg: [True False False True True]) based on whether each value is in some other list.

a = np.array([11, 12, 13, 14, 15, 16, 17])
mask = a in [14, 16, 8] #(this doesn't work at all!)
#I would like to see [False False False True False True False]

So far the best I can come up with is a list comprehension.

mask = [True if x in other_list else False for x in my_numpy_array]

Please let me know if you know of some secret sauce to do this with NumPy and fast (computationally), as this list in reality is huge.

Upvotes: 21

Views: 9417

Answers (2)

sgt pepper
sgt pepper

Reputation: 604

Accepted answer is right but currently numpy's docs recommend using isin function instead of in1d

Upvotes: 5

NPE
NPE

Reputation: 500407

Use numpy.in1d():

In [6]: np.in1d(a, [14, 16, 18])
Out[6]: array([False, False, False,  True, False,  True, False], dtype=bool)

Upvotes: 32

Related Questions