通过求和来聚合Numpy数组

Ric*_*ard 3 python arrays numpy

我有一个Numpy阵形(4320,8640).我想有一个形状的阵列(2160,4320).

您会注意到新阵列的每个单元格都映射到旧数组中的2x2单元格集.我希望新数组中的单元格值是旧数组中此块中值的总和.

我可以这样做:

import numpy

#Generate an example array
arr = numpy.random.randint(10,size=(4320,8640))

#Perform the transformation
arrtrans = numpy.array([ [ arr[y][x]+arr[y+1][x]+arr[y][x+1]+arr[y+1][x+1] for x in range(0,8640,2)] for y in range(0,4320,2)])
Run Code Online (Sandbox Code Playgroud)

但这很慢,而且有点难看.

有没有办法使用Numpy(或可互操作的包)?

Jai*_*ime 7

当窗口完全适合数组时,重塑为更多维度并折叠额外的维度np.sum是一种使用numpy执行此操作的规范方法:

>>> a = np.random.rand(4320,8640)
>>> a.shape
(4320, 8640)
>>> a_small = a.reshape(2160, 2, 4320, 2).sum(axis=(1, 3))
>>> a_small.shape
(2160, 4320)
>>> np.allclose(a_small[100, 203], a[200:202, 406:408].sum())
True
Run Code Online (Sandbox Code Playgroud)