Вы можете векторизовать свой код, используя функции skimage.utils.view_as_blocks
и numpy.sum
:
import numpy as np
from skimage.util import view_as_blocks
N, M = 4, 4
n, m = 2, 2
X = np.random.randint(size=(N, M), low=0, high=10)
blocks = view_as_blocks(X, (N//n, M//n))
Y = np.sum(blocks, axis=(-1, -2))
N
и M
должныбыть целыми числами n
и m
соответственно.В противном случае вы получите следующую ошибку:
ValueError: block_shape
не совместим с arr_in
Пример выполнения
In [74]: X
Out[74]:
array([[5, 6, 3, 7],
[5, 0, 3, 0],
[6, 1, 8, 0],
[4, 0, 7, 2]])
In [75]: Y
Out[75]:
array([[16, 13],
[11, 17]])