2014-03-06 48 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

相关问题