2016-03-07 76 views
0

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

[[[ 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

您是否在使用numpy?随着numpy,你写的表达可能会做元素明智的加法。使用标准的Python(不是numpy),它只会将一维列表添加到矩阵的末尾。 –

+0

是的,我正在使用numpy –

回答

0

如果你的RGB值都只是浮在里面,做一个方式,它是使用布尔口罩选择您的数据:

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

甚至,只选择 '列' 你想改变:

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

编辑

在numpy的,阵列可通过整数索引的(就像你所期望的),但也可以通过布尔面具,告诉采取哪些元素与否:由于布尔运算工作的elementwise

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

第一个由于某种原因在该行的所有内容中添加了一个,但第二个正是我所期待的! –

+0

哎呀,你是对的,我正在将我的面具应用到错误的数组中;这现在已经得到纠正。感谢您指出了这一点 ! – val