如果我有一个包含布尔值的numpy数组,比如一些数学比较的输出,那么确定该数组是否只包含一个连续的Trues 块的最佳方法是什么,例如
array([False, False, False, True, True, True, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
即序列...,True, False, ..., True...从未发生的地方?
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不为空的情况下才有效.