0

I had a statement in my python code something like

msk = (var1 == 49) | (var1 == 26) | (var1 == 28)

Now, instead of (49,26,28), I want to have a longer list, and want to make it variable,

I tried the solution at Python equivalent of MATLAB's "ismember" function but it is not exactly what I want.

Something like:

msk = (var1 == list1)
Community
  • 1
  • 1
AnandJ
  • 346
  • 4
  • 15

3 Answers3

2

Using the set intersection operator:

import numpy as np

list1 = np.Array([1, 2, 3, 49])
list2 = np.Array([1, 2, 3, 4])

msk1 = any({49, 26, 28} & set(list1))
# => True

msk2 = any({49, 26, 28} & set(list2))
# => False

This works for both numpy arrays and regular lists.

Simon Fromme
  • 3,104
  • 18
  • 30
2

You can use the in operator:

msk = var1 in {49, 26, 28}
Nagasaki45
  • 2,634
  • 1
  • 22
  • 27
1

numpy.in1d should work for this case:

a
Out[153]: array([ 1, 10, 26, 28, 40, 49])

b
Out[154]: array([26, 28, 49, 50])

To check whether an element in array a is also in array b:

np.in1d(a, b)
Out[156]: array([False, False,  True,  True, False,  True], dtype=bool)

Of course you can use it for single elements as well:

np.in1d(28, b)
Out[158]: array([ True], dtype=bool)

np.in1d(43, b)
Out[159]: array([False], dtype=bool)
ayhan
  • 70,170
  • 20
  • 182
  • 203