您可以使用一个巧妙的应用在纯numpy的做到这一点
np.diff和
np.add.reduceat。
np.diff将为您提供最右边一列更改的索引:
d = np.diff(arr[:, -1])
np.where会将您的布尔索引
d转换为
np.add.reduceat期望的整数索引:
d = np.where(d)[0]
reduceat还会期望看到零索引,并且所有内容都需要移动一个:
indices = np.r_[0, e + 1]
np.r_比起
np.concatenate使用标量,使用此处要方便得多。然后,总和变为:
result = np.add.reduceat(arr, indices, axis=0)
当然,这可以组合成一种形式:
>>> result = np.add.reduceat(arr, np.r_[0, np.where(np.diff(arr[:, -1]))[0] + 1], axis=0)>>> resultarray([[ 6, 8, 10, 12, 4000], [ 12, 4, 6, 8, 4002], [ 8, 10, 12, 4, 4004], [ 14, 6, 8, 10, 4006]])



