我有一个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魔法?
答案 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)))