根据另一个数组中的存在更改 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])
我想根据此值是否存在于另一个数组 (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])