2014-02-06 60 views
1

我有兩個蒙面numpy陣列。這些是圖像。操作在蒙面的Numpy陣列

我想從另一箇中減去一個。

如果我做標準減法運算,

ma1 - ma2 

它將減去他們,如果他們沒有被屏蔽(他們的面具不考慮)。我希望他們減去他們的面具。

有誰知道如何從彼此減去蒙面numpy陣列?

+3

你最好秀一些示例輸入和輸出;) – zhangxaochen

+0

對於僅在其中一個數組中掩碼的條目,您期望什麼?我認爲這是不明確的,你應該在操作之後設置掩碼來明確應該使用什麼掩碼。 –

回答

4

它應該工作。當你在被屏蔽的數組中進行操作時,它將會涉及操作中所涉及的掩碼的聯合。下面的案例表明numpy的是如何選擇的時候,你做兩個蒙面陣列之間的減法,將要改變的值:

a1 = np.random.random((100,100)) 
a2 = np.random.nandom((100,100)) 

a1 = np.ma.array(a1, mask=a1<0.5) 
a2 = np.ma.array(a2, mask=a2<0.5) 

umask = np.logical_or(a1.mask, a2.mask) # <-- union of the masks 

test = a1.data - a2.data 
test[umask] = a1.data[umask] # <-- "canceling" the operation according to the 
          #  combined mask 

np.allclose((a1-a2), test) 
#True 

正如你看到的,結果是一樣的...

+0

你確定這可以嗎?我正在嘗試它,得到相同的問題 –

+0

這兩個面具都在同一區域的方式 –

+0

@Highschooler你有任何輸入你的數組樣本?也許你可以編輯你的問題添加這些信息... –