在Python中添加符合条件的数组中的元素

时间:2016-03-07 17:59:47

标签: python arrays addition

我试图将两个矩阵一起添加,但是,我只想将它添加到符合预定条件的数组中的某些元素。例如,假设我有一个2D(2x2)RGB数组:

[[[ 0.          0.          0.5       ]
 [ 0.89500316  1.          0.07273877]]

 [[ 0.          0.          0.5       ]
  [ 0.          0.          0.5       ]]]

我想强加条件,将[0, 0, 1]添加到与less than 0.1对应的蓝色元素中,以便输出为:

[[[ 0.          0.          0.5       ]
 [ 0.89500316  1.          1.07273877]]

 [[ 0.          0.          0.5       ]
  [ 0.          0.          0.5       ]]]

我该怎么做?我已经设置了,但它显然将1添加到第三列中的所有元素:

a = a + [0, 0, 1]
print a

1 个答案:

答案 0 :(得分:0)

如果您的RGB值只是浮动,其中一种方法是使用布尔掩码来选择数据:

>>> a[:, :, 2][a[:, :, 2] < 0.1] += 1.0

甚至,只选择您想要更改的“列”:

>>> view = a[:, :, 2]
>>> view[view < 0.1] += 1.0

修改

在Numpy中,数组可以通过整数(就像你期望的那样)进行索引,也可以通过布尔掩码进行索引,告诉你要采用哪个元素:

>>> foo = np.array([[1, 2], [3, 4]])
>>> mask = np.array([[True, False], [False, True]])
>>> foo[mask]
array([1, 4])

由于布尔运算在数组上以元素方式工作,因此您可以“选择”符合条件的元素:

>>> foo[foo > 2]
array([3, 4])

此外,进行这样的选择会在原始数组上返回视图,因此这些元素可以在原始数组中进行变异:

>>> foo[foo % 2 == 0] += 1
>>> foo
array([[1, 3],
       [3, 5]])