Добавление смещенных матриц 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

Может ли широковещательная рассылка или нарезка сделать это?

Кажется, я упускаю что-то очевидное.

9
задан Peter Mortensen 27 March 2012 в 22:58
поделиться