Добавление смещенных матриц NumPy различного размера / формы

Короче говоря: у меня есть две матрицы (или массивы):

import numpy

block_1 = numpy.matrix([[ 0, 0, 0, 0, 0],
                        [ 0, 0, 0, 0, 0],
                        [ 0, 0, 0, 0, 0],
                        [ 0, 0, 0, 0, 0]])

block_2 = numpy.matrix([[ 1, 1, 1],
                        [ 1, 1, 1],
                        [ 1, 1, 1],
                        [ 1, 1, 1]])

У меня смещениеblock_2 вblock_1 элемент системы координат.

pos = (1,1)

Я хочу иметь возможность добавлять их (быстро), чтобы получить:

[[0 0 0 0 0]
 [0 1 1 1 0]
 [0 1 1 1 0]
 [0 1 1 1 0]]

Вкратце: я хотел бы быстрый способ сложить две разные матрицы форм, где одна из матриц может быть смещена. Результирующая матрица должна иметь форму первой матрицы, и перекрывающиеся элементы между двумя матрицами суммируются. Если перекрытия нет, только первая матрица возвращается без изменений.

У меня есть функция, которая работает нормально, но это уродливо и поэлементно:

def add_blocks(block_1, block_2, pos):
    for i in xrange(0, block_2.shape[0]):
        for j in xrange(0, block_2.shape[1]):
            if (i + pos[1] >= 0) and (i + pos[1] < block_1.shape[0])
               and (j + pos[0] >= 0) and (j + pos[0] < block_1.shape[1]):
                block_1[pos[1] + i, pos[0] + j] += block_2[i,j]
    return block_1

Может ли вещание или нарезка, возможно, сделать это?

Я чувствую, что, может быть, мне не хватает чего-то очевидного.

Ответы на вопрос(5)

Ваш ответ на вопрос