我试图将两个矩阵一起添加,但是,我只想将它添加到符合预定条件的数组中的某些元素。例如,假设我有一个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
答案 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]])