将两个 numpy 数组之间的所有非相交值替换为 0

Replace all non-intersecting values with 0, between two numpy arrays

假设我有一个多维数组,例如:

a = array([[[86, 27],
    [26, 59]],

   [[ 1, 16],
    [46,  5]],

   [[71, 85],
    [ 6, 71]]])

假设我有一个一维数组 (b),其中一些值可以在我的多维数组 (a) 中看到:

b = [26, 16, 6, 71]

现在我想用零替换数组 a 中的所有非交叉值。我想得到以下结果:

a = array([[[0, 0],
    [26, 0]],

   [[ 0, 16],
    [ 0,  0]],

   [[71, 0],
    [ 6, 71]]])

我怎样才能做到这一点?

我尝试了几种编码方式,但都没有用。我希望以下行可以工作,但我认为以这种格式使用 not in 存在问题:

a = np.where(a not in b, int(0), a)

尝试此操作时出现以下错误:

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()

我不确定接下来要尝试什么。有什么想法吗?

np.isin() 非常适合这个:

a[~np.isin(a, b)] = 0

输出:

>>> a
array([[[ 0,  0],
        [26,  0]],

       [[ 0, 16],
        [ 0,  0]],

       [[71,  0],
        [ 6, 71]]])