Это может помочь вам отойти оттуда.Вы можете использовать функцию convolve в scipy
, чтобы свернуть вашу матрицу с ядром, которое вы генерируете.Это ниже будет считать ненулевые записи в пределах досягаемости ядра.Обратите внимание, что я преобразовал входную матрицу в единицу, чтобы она суммировала ненулевые местоположения, а не значения.
In [74]: import numpy as np
In [75]: from scipy.ndimage.filters import *
In [76]: a
Out[76]:
array([[1, 2, 0, 0],
[1, 1, 0, 0],
[0, 0, 0, 0],
[5, 5, 5, 5]])
In [77]: a_ones = np.where(a>0, 1, 0)
In [78]: a_ones
Out[78]:
array([[1, 1, 0, 0],
[1, 1, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1]])
In [79]: k
Out[79]:
array([[0, 1, 0],
[1, 0, 1],
[0, 1, 0]])
In [80]: convolve(a_ones, k, mode='constant')
Out[80]:
array([[2, 2, 1, 0],
[2, 2, 1, 0],
[2, 2, 1, 1],
[1, 2, 2, 1]])
In [81]: