別の可能性:相関または畳み込みを使用する
>>> a = np.random.randn(50)
>>> b = (a - a.mean()) > 0
>>> b.astype(int)
array([0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0,
1, 1, 1, 1])
>>> c = np.correlate(b, np.ones(3), mode='valid')
>>> c
array([ 2., 2., 1., 1., 1., 1., 0., 0., 1., 2., 3., 2., 2.,
1., 1., 0., 0., 1., 2., 3., 3., 3., 3., 3., 2., 2.,
2., 2., 2., 1., 1., 1., 1., 2., 1., 2., 2., 2., 1.,
0., 0., 1., 2., 2., 2., 2., 3., 3.])
>>> c.max() == 3
True
>>> c.min() == 0
True
HYRYcumsumバージョンより遅くなります。
余談ですが、同様の実行をテストするための実行テストがstatsmodelsにあります