在平面而非轴上求和3d numpy数组

2024-06-26 13:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个3d numpy阵列(nx5x5)。我想把n个切片相加。因此,新的形状将是(nx1x1),其中每个n只是单个5x5数组的总和。我可以在numpy中不使用循环执行此操作吗?np.sum有它的轴参数,但它们将数组重塑为错误的形状。我想我可能需要给np.sum打两次电话?但我在想怎么做时遇到了麻烦。有人知道答案吗


Tags: 答案numpy参数错误np切片数组电话
3条回答

以下是三种不同的方法:

  1. 使用tuple表示axis

    a.sum(axis=(1, 2))
    
  2. 正确重塑以合并要求和的轴:

    a.reshape(a.shape[0], -1).sum(axis=1)
    
  3. 使用多个总和:

    a.sum(-1).sum(-1)
    

    a.sum(1).sum(-1)
    

    等等

我想我已经明白了这一点,对于任何遇到同样问题的人来说。事实证明,您可以从np.sum中选择两个轴,生成一个平面而不是一条直线。因此:

np.sum(a, (1,2)

这就是诀窍

np.sum has its axis arguments, but they reshape the array into the wrong shape

求和是一种缩减操作,在特定轴上进行缩减(通过对该轴上的所有元素求和)后,该特定尺寸将被删除。如果不希望,可以传递可选的keepdims参数

values = np.random.randn(3,5,5)
values.sum(axis=(1,2), keepdims=True)

相关问题 更多 >