2016-03-07 74 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