在N维numpy数组中第一次出现值

时间:2014-03-06 23:00:39

标签: python arrays numpy

我见过this question,但希望减少从mask = array == value

创建的数组
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 个答案:

答案 0 :(得分: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)