2015-05-04 64 views
-2

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

我试图与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

向我们展示您尝试过以及您获得了什么。 – plonser

+0

样品输入和预期输出请?你的问题还不够清楚 – ZdaR

+0

对不起,编辑 –

回答

1

a in b这里将永远是假的,但你可以使用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]) 
+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] 
+0

是的,谢谢。这是否也可以反转?以[not b] = 0 –

相关问题