16

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.

Joran Beasley
  • 103,130
  • 11
  • 146
  • 174

2 Answers2

29

Use numpy.in1d():

In [6]: np.in1d(a, [14, 16, 18])
Out[6]: array([False, False, False,  True, False,  True, False], dtype=bool)
NPE
  • 464,258
  • 100
  • 912
  • 987
2

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

sgt pepper
  • 414
  • 6
  • 13