Добавление смещенных матриц 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
Может ли вещание или нарезка, возможно, сделать это?
Я чувствую, что, может быть, мне не хватает чего-то очевидного.