Say I have a multi-dimensional array, for example:
a = array([[[86, 27], [26, 59]], [[ 1, 16], [46, 5]], [[71, 85], [ 6, 71]]])
And say I have a one-dimensional array (b
), with some values which may be seen in my multi-dimensional array (a
):
b = [26, 16, 6, 71]
Now I want to replace all of the non-intersecting values in array a
with zero. I want to get the following result:
a = array([[[0, 0], [26, 0]], [[ 0, 16], [ 0, 0]], [[71, 0], [ 6, 71]]])
How could I achieve this?
I tried several ways of coding which didn’t work. I expected the following line to work, but I think there is an issue with using not in
in this format:
a = np.where(a not in b, int(0), a)
I get the following error when I try this:
arr = np.where(arr not in required_intensities, int(0), arr) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
I am unsure what to try next. Any ideas?
Advertisement
Answer
np.isin()
is perfect for this:
a[~np.isin(a, b)] = 0
Output:
>>> a array([[[ 0, 0], [26, 0]], [[ 0, 16], [ 0, 0]], [[71, 0], [ 6, 71]]])