18

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
  • 110,522
  • 12
  • 160
  • 179

2 Answers2

32

Use numpy.in1d():

In [6]: np.in1d(a, [14, 16, 18])
Out[6]: array([False, False, False,  True, False,  True, False], dtype=bool)
NPE
  • 486,780
  • 108
  • 951
  • 1,012
2

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

sgt pepper
  • 504
  • 7
  • 15