根据另一个数组中的存在更改 numpy 数组中的值

change value in numpy array based on presence in another array

我想根据此值是否存在于另一个数组 (1D) 中而不考虑位置来更改数组 (1D) 的每个值。

我试图与 numpy.where() 一起使用,但还没有找到任何可行的解决方案。

import numpy as np
a = np.arange(10)
b = np.array([5,6,7])

a = np.where(a in b, 0, -1)

评估为:

[0 1 2 3 4 5 6 7 8 9]

我想得到什么:

[0 1 2 3 4 -1 -1 -1 8 9]

编辑:非常感谢您的评论,很抱歉没有正确说明问题。我对其进行了编辑以使其更清楚。

您可以用一个数组索引另一个数组:

import numpy as np
a = np.arange(10)
b = np.array([5,6,7])

a[b] = 0    # [0 1 2 3 4 0 0 0 8 9]
这里的

a in b永远是False,但是可以用np.in1d按值去掉:

>>> np.in1d(a,b)
array([False, False, False, False, False,  True,  True,  True, False, False], dtype=bool)
>>> a[np.in1d(a,b)] = 0
>>> a
array([0, 1, 2, 3, 4, 0, 0, 0, 8, 9])

where,如果您愿意:

>>> a = np.arange(10)
>>> np.where(np.in1d(a,b), 999, a)
array([  0,   1,   2,   3,   4, 999, 999, 999,   8,   9])