2017-05-03 85 views
-1

我有一個3D Numpy陣列[[[242,122,123],[111,30,12]]]我想爲它創建一個遮罩。對於第一個數組,它將是條件242> 122 + 123。有沒有辦法做到這一點與numpy的條件?類似於mask[a > b+c] = 1其中a,b,c是數組中的值。在Numpy中製作3D陣列的2D面具

+1

什麼是預期的輸出? – Divakar

+0

@Divakar在這種情況下掩碼應該是[[0,1]],因爲242> 122 + 123是假的,但是111> 30 + 12是真的。如果第一個數組是M. 那麼看來mask [M [:,:0]> M [:,1] + M [:,:2]] = 1。但是,如果我想添加額外的條件,我使用和或做我做這樣的面具[cond1,cond2] = 1或maks [cond1和cond2] = 1? –

回答

0

這只是一個猜測(因爲你想要什麼)

In [134]: M=np.array([[[242,122,123],[111,30,12]]]) 
In [135]: M.shape 
Out[135]: (1, 2, 3) 
In [136]: M[:,:,0]>(M[:,:,1]+M[:,:,2]) 
Out[136]: array([[False, True]], dtype=bool) 
In [137]: M[_] 
Out[137]: array([[111, 30, 12]]) 
+0

這使我想到需要做什麼。 結果爲:「mask [ (image [:,:,2]/255.0> ar *(image [:, 1]/255.0 + image [:,:,0]/255.0))& (圖像[::[:2]/255.0 -np.maximum(圖像[:,:1],圖像[:,0])/ 255.0)> (br *(np.maximum :,],1],image [:,:,0]) - np.minimum(image [:,:1],image [:, 0]))/ 255.0) ) ] = 255「 。這個洞穴我的程序速度提升28.5倍:D –