【问题标题】:Sum of all slices along given axis of a numpy array沿numpy数组的给定轴的所有切片的总和
【发布时间】:2016-07-13 14:03:53
【问题描述】:

我有一个形状为 (3,12,7,5) 的 numpy 数组。我想得到这个数组第一个轴上所有切片的总和。

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 的魔法是什么?

【问题讨论】:

  • np.sum(data, axis=...) 应该可以工作
  • 不幸的是,它没有。我编辑了这个问题。啊!确实如此!
  • 我以为是axis=(0,1,2),没有成功。这就是我发布问题的原因。为什么它是轴=(1,2,3)?这不是与 numpy 枚举它的轴的方式相反吗?
  • 在添加元组版axis之前,我们曾经做过data.sum(axis=-1).sum(axis=-1)...。也就是说,只是在欲望轴上重复求和。

标签: python numpy


【解决方案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)))

【讨论】:

  • 我以为是axis=(0,1,2),没有成功。这就是我发布问题的原因。为什么它是轴=(1,2,3)?这不是与 numpy 枚举它的轴的方式相反吗?
  • @ThomasMöbius 好吧,您正在对最后三个轴进行求和,这就是为什么我们需要用np.sum 列出这些轴。请记住,我们用np.sum 提到的轴是/是所有元素相加的轴/轴。在我们的例子中,它将是最后三个轴。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2021-06-04
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 2022-10-30
相关资源
最近更新 更多