同时更改 python 个 numpy 数组元素

Simultaneous changing of python numpy array elements

我有一个范围为 [0,3] 的整数矢量,例如:

v = [0,0,1,2,1,3, 0,3,0,2,1,1,0,2,0,3,2,1]

我知道我可以使用以下

将向量中元素的特定值替换为其他值
v[v == 0] = 5

将向量 v 中 0 的所有出现更改为值 5。 但我想做一些不同的事情——我想将 0 的所有值(我们称它们为 target values)更改为 1,并且所有不同于 [=14= 的值] 到 0,因此我想获得以下内容:

v = [1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0]

但是,我无法调用替换代码(我在上面使用过)如下:

v[v==0] = 1
v[v!=0] = 0

因为这显然会导致一个零向量。 是否有可能以并行方式进行上述替换,以获得所需的向量? (我想要一个通用的技术,即使我会改变我的目标值,我也可以使用它)。任何建议都会很有帮助!

你可以检查v是否等于0,然后将布尔数组转换为int,所以如果原始值为零,则布尔为真并转换为1,否则为0:

v = np.array([0,0,1,2,1,3, 0,3,0,2,1,1,0,2,0,3,2,1])
(v == 0).astype(int)
# array([1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0])

或使用numpy.where:

np.where(v == 0, 1, 0)
# array([1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0])