我有一个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)])
但这很慢,而且有点难看。
有没有办法使用numpy(或一个可互操作的包)来实现这一点?
最佳答案
我不确定是否存在你想要的包,但是这个代码计算得快得多。
>>> arrtrans2 = arr[::2, ::2] + arr[::2, 1::2] + arr[1::2, ::2] + arr[1::2, 1::2]
>>> numpy.allclose(arrtrans, arrtrans2)
True
其中
::2
和1::2
分别由0, 2, 4, ...
和1, 3, 5, ...
翻译。