同时更改python numpy数组元素

时间:2017-07-28 20:33:39

标签: python numpy vector substitution

我有一个来自范围[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,并且所有值都与{{1}不同} 0,因此我想获得以下内容:

0

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以检查v是否等于零,然后将布尔数组转换为int,因此如果原始值为零,则布尔值为true并转换为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])