2014-03-06 47 views
2

我看到this question,但希望減少從mask = array == value獲取一個值的第一次出現在一個N維numpy的陣列

mask = array([[[ True, True, True], 
       [False, True, True]], 

       [[False, True, True], 
       [False, True, True]], 

       [[False, False, True], 
       [False, True, True]]]) 

這導致

where(mask) = (array([0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2]), 
       array([0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1]), 
       array([0, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2])) 

和我創建的數組想將其減少到第一次出現的數組True

array([[0, 1], 
     [1, 1], 
     [2, 1]]) 

,但不能解決如何從numpy.where的輸出去解決這個問題。誰能幫我嗎?

+1

如果陣列具有3個維度,不應真的第一次出現是'陣列([[0] ,[0],[0]])'? 「首次出現的數組」是什麼意思? – wflynny

+0

一個解決方案可能是'np.argmax',可能帶有一個軸定義。 – M4rtini

回答

2

其實,這是因爲這簡單:

np.argmax(mask, 2) 

實施例:

In [15]: %paste 
mask = array([[[ True, True, True], 
       [False, True, True]], 

       [[False, True, True], 
       [False, True, True]], 

       [[False, False, True], 
       [False, True, True]]]) 

## -- End pasted text -- 

In [16]: np.argmax(mask, 2) 
Out[16]: 
array([[0, 1], 
     [1, 1], 
     [2, 1]], dtype=int64) 
+0

哈,太好了,謝謝! – bountiful

相關問題