Короче:У меня есть две матрицы (или массивы):
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
Может ли широковещательная рассылка или нарезка сделать это?
Кажется, я упускаю что-то очевидное.