如何判断numpy布尔数组是否只包含一个"True`s"块?

Dun*_*eod 7 python numpy

如果我有一个包含布尔值的numpy数组,比如一些数学比较的输出,那么确定该数组是否只包含一个连续的Trues 块的最佳方法是什么,例如

array([False, False, False, True, True, True, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

即序列...,True, False, ..., True...从未发生的地方?

shx*_*hx2 5

numpy.diff在这种情况下很有用.您可以计算diffed数组中-1的数量.

注意,您还需要检查最后一个元素 - 如果它是True,则diffed数组中不会有-1 表示这一点.更好的是,你可以False在之前附加到数组diff.

import numpy as np
a = np.array([False, False, False, True, True, True, False, False, False], dtype=bool)
d = np.diff(np.asarray(a, dtype=int))
d
=> array([ 0,  0,  1,  0,  0, -1,  0,  0])
(d < 0).sum()
=> 1
Run Code Online (Sandbox Code Playgroud)

要追加False到最后:

b = np.append(a, [ False ])
d = np.diff(np.asarray(b, dtype=int))
...
Run Code Online (Sandbox Code Playgroud)

现在,"序列......,真,假,......,真......永远不会发生"iff (d<0).sum() < 2.

避免append操作(并使代码更加模糊)的一个技巧是:( (d<0).sum() + a[-1] < 2即,如果[-1]为True,则将其计为块).当然,这只有在a不为空的情况下才有效.

  • 似乎您需要在两端添加 `False`。 (2认同)