Convolution
является ключевым словом здесь. У вас есть двумерный массив, но вы сверните только вдоль одной оси, поэтому, возможно, этот вопрос актуален.
- для 1D свертки вы можете использовать
numpy.convolve()
- для 2D свертки вы можете использовать
scipy.signal.covolve2d()
В вашем случае вы перемещаете ядро с формой (2,1)
[[0.5],[0.5]]
по массиву, чтобы получить значения
res[row][col] = 0.5*arr[row][col] + 0.5*arr[row+1][col]
Применительно к вашему примеру:
import scipy.signal as sg
b = [[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[6, 7, 8],
[4, 5, 6]]
res = sg.convolve2d(b, [[0.5], [0.5]], mode='valid')
Этот подход быстро и легко обобщить:
kernel = (3, 2)
sg.convolve2d(arr, np.full(kernel, 1/np.size(kernel)), mode='valid')