Изменить каждый элемент матрицы без использования цикла

Задача такая:

Пусть есть матрица A с элементами a[i, j], где 0 <= i <= n - 1, 0 <= j <= m - 1. Пусть h, w - некоторые натуральные числа.

Как я могу получить средствами numpy (без использования циклов!!) матрицу C такого же размера, в который каждый элемент

c[i, j] = a[i, j] + a[i, j-1] + a[i, j-2] + ... + a[i, j-w] +
        + a[i-1, j] + a[i-1, j-1] + a[i-1, j-2] + ... + a[i-1, j-w] + 
        + ... +
        + a[i-h, j] + a[i-h, j-1] + a[i-h, j-2] + ... + a[i-h, j-w]

Причём, когда i или j выходят за размеры изначальной матрицы, то будем считать a[i, j] = 0

Другими словами, вроде

c[i, j] = a[i-h:i+1, j-w:j+1].sum()

Всем спасибо

UPD:

Пример

Пусть h = 1, w = 2

a = [[ 1  9 -3  6]
     [ 2 -8  0  5]
     [ 0  0 10  6]
     [-2  6  0 -1]]

Теперь найдём матрицу c. Например,

c[2, 3] = a[2, 3] + a[2, 3-1] + a[2, 3-2] +
        + a[2-1, 3] + a[2-1, 3-1] + a[2-1, 3-2] = 

        = a[2, 3] + a[2, 2] + a[2, 1] +
        + a[1, 3] + a[1, 2] + a[1, 1] = 

        = 6 + 10 + 0 + 
        + 5 + 0 + (-8) = 13

И так далее

C = [[ 1 10  7 12]
     [ 3  4  1  9]
     [ 2 -6  4 13]
     [-2  4 14 21]]

Ответы (0 шт):