沿numpy数组的给定轴的所有切片的总和

时间:2016-07-13 14:03:54

标签: python numpy

我有一个numpy形状的阵列(3,12,7,5)。我希望沿着这个数组的第一个轴得到所有切片的总和。

data = np.random.randint(low=0, high=8000, size=3*12*7*5).reshape(3,12,7,5)

data[0,...].sum()
data[1,...].sum()
data[2,...].sum()

np.array((data[0,...].sum(), data[1,...].sum(), data[2,...].sum()))

首先,我认为应该可以使用np.sum(data, axis=...),但事实并非如此。

如何一次性执行此计算。什么是numpy魔法?

1 个答案:

答案 0 :(得分:1)

对于通用的ndarray,您可以重塑为2D数组,保持沿第一个轴的元素数量相同,并且合并将所有剩余的轴作为第二个轴,最后沿着该轴求和,就像这样 -

data.reshape(data.shape[0],-1).sum(axis=1)

对于4D数组,您可以包括要执行求和的轴。所以,为了解决我们的情况,我们会有 -

data.sum(axis=(1,2,3))

这可以扩展为通过创建适当轴ID的元组来使其适用于通用ndarray,从而避免重新整形,如此 -

data.sum(axis=tuple(np.arange(1,data.ndim)))