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

Adding elements in arrays that fall within a criteria in Python

我正在尝试将两个矩阵相加,但是,我只想将其添加到数组中符合预定条件的某些元素。例如,假设我有一个 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

如果您的 RGB 值只是浮动在其中,一种方法是使用布尔值 masks 到 select 您的数据:

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

或者甚至 select 仅 'column' 您想要更改的内容:

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

由于布尔运算按元素对数组进行运算,因此您可以 'select' 个符合条件的元素:

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

另外,在原数组上取这样一个selection returns a view,所以可以在原数组中对这些元素进行变异:

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