Skip to content
Advertisement

How to make a boolean array by checking if the items in an array is in a list?

I’m trying to find every item in an numpy array arr that’s also in an arbitrary list lst and replace them, but while arr > 0 will generate a boolean array for easy masking, arr in lst only works with all() or any() which isn’t what I need.

Example input: array (1, 2, 3, 4, 5), list [2, 4, 6, 8]

Output: array (1, 0, 3, 0, 5)

I managed to get the same result with for loops:

for i in range(len(arr)):
    if arr[i] in lst:
        arr[i] = 0

Just wondering if there are other ways to do it that set arrays apart from lists.

Advertisement

Answer

You can use numpy.isin:

a = np.array((1, 2, 3, 4, 5))
lst = [2, 4, 6, 8]
a[np.isin(a, lst)] = 0

Gives you an a of:

array([1, 0, 3, 0, 5])
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement