根据另一个数组中的状态更改numpy数组中的值

时间:2015-05-04 14:00:36

标签: python numpy conditional

我想根据这个值是否存在于另一个数组(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]

修改:非常感谢您的评论,并且抱歉没有正确说明问题。我编辑它以使其更清晰。

2 个答案:

答案 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])