我想根据这个值是否存在于另一个数组(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]
修改:非常感谢您的评论,并且抱歉没有正确说明问题。我编辑它以使其更清晰。
答案 0 :(得分:1)
您可以将一个数组索引为另一个数组:
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]
答案 1 :(得分:1)
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])