Python NumPy数组中N行的求和块

Python NumPy数组中N行的求和块,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,这可能是一个重复的问题,但我找不到我需要的确切答案 我试图将每N行(本例中为4行)相加。所以在一个8乘9的矩阵中,我将得到一个2乘9的数组,也就是说,将行0-3相加,然后将行4-7相加。现在,这是我的解决方案,但有没有一种方法不使用列表理解?有没有一种更“numpy”的方式来做到这一点?因为我最终得到的是2个1×9数组的列表,而不是一个2×9数组 输入数组不固定为8×9,它可以是12×9或28×9,但输入数组的总行数将始终是N的整数倍(在本例中为8,N=4) 重塑以将第一个轴拆分为两个,使后一个

这可能是一个重复的问题,但我找不到我需要的确切答案

我试图将每N行(本例中为4行)相加。所以在一个8乘9的矩阵中,我将得到一个2乘9的数组,也就是说,将行0-3相加,然后将行4-7相加。现在,这是我的解决方案,但有没有一种方法不使用列表理解?有没有一种更“numpy”的方式来做到这一点?因为我最终得到的是2个1×9数组的列表,而不是一个2×9数组

输入数组不固定为8×9,它可以是12×9或28×9,但输入数组的总行数将始终是N的整数倍(在本例中为8,N=4)


重塑以将第一个轴拆分为两个,使后一个轴的长度等于窗口长度=
4
,为我们提供一个
3D
数组,然后沿该数组求和,如下所示-

a.reshape(-1,4,a.shape[-1]).sum(1)
它在通用形状阵列上工作,在整形方法中使用
-1
,因为它自己计算分割/整形版本中沿第一个轴的长度,为我们提供了通用解决方案

让事情变得清楚的示例运行-

# Input array with 8 rows
In [15]: a = np.arange(72).reshape(8,9)

# Get output shape
In [16]: a.reshape(-1,4,a.shape[-1]).sum(1).shape
Out[16]: (2, 9)

# Input array with 28 rows
In [17]: a = np.arange(28*9).reshape(28,9)

# Get output shape
In [18]: a.reshape(-1,4,a.shape[-1]).sum(1).shape
Out[18]: (7, 9)

重塑以将第一个轴拆分为两个,使后一个轴的长度等于窗口长度=
4
,为我们提供一个
3D
数组,然后沿该数组求和,如下所示-

a.reshape(-1,4,a.shape[-1]).sum(1)
它在通用形状阵列上工作,在整形方法中使用
-1
,因为它自己计算分割/整形版本中沿第一个轴的长度,为我们提供了通用解决方案

让事情变得清楚的示例运行-

# Input array with 8 rows
In [15]: a = np.arange(72).reshape(8,9)

# Get output shape
In [16]: a.reshape(-1,4,a.shape[-1]).sum(1).shape
Out[16]: (2, 9)

# Input array with 28 rows
In [17]: a = np.arange(28*9).reshape(28,9)

# Get output shape
In [18]: a.reshape(-1,4,a.shape[-1]).sum(1).shape
Out[18]: (7, 9)

@bFig8确保它适用于您的通用形状数组,正如您提到的,行数会有所不同。@bFig8这就是为什么我的解决方案(解决方案之间的差异)中有
-1
用于通用解决方案的原因。@bFig8确保它适用于您的通用形状数组,正如您所提到的,行数会有所不同。@bFig8这就是为什么我的解决方案中有
-1
(解决方案之间的差异)作为通用解决方案。