我正在寻找一种矢量化的方法来进行累积和,每次出现0时都会重置。例如,我们有一个数组ar = np.array([0,1,0,1,1,0,1,0])
。我想要的输出是np.array([0,1,0,1,2,0,1,0])
。
我有以下实现,但它们没有完全矢量化。
Method 1:
s = pd.Series(ar)
data = s.groupby(s.eq(0).cumsum()).cumsum().tolist()
Method 2:
def intervaled_cumsum(ar):
split = np.array((np.split(ar, np.where(ar<1)[0])))[1:]
sizes = np.array([len(i) for i in split])
out = ar.copy()
arc = ar.cumsum()
idx = sizes.cumsum()
out[idx[0]] = ar[idx[0]] - arc[idx[0]-1]
out[idx[1:-1]] = ar[idx[1:-1]] - np.diff(arc[idx[:-1]-1])
return out.cumsum()
我怎么可能在python中使用任何库真的这样做,可能是numpy以外的东西?
的答案