Просто используйте двумерную свертку (см. conv2
).
2 × 2, шаг 1 по каждому измерению
M = conv2(eye(N-1), miniM);
m
× *Случай 1010 *, шаг 1 по каждому измерению
M = conv2(eye(N-size(miniM-1)+1), miniM);
m
× n
случай, произвольные шаги по каждому измерению
В этом случае необходимо определить шаги:
step = [2 1]; % desired step along each dimension
и имеет больше смысла определять желаемое количество повторений R
, а не конечный размер (N
), потому что последнее может быть недостижимо при полных повторениях miniM
:
R = 4; % desired number of repetitions
Тогда:
M = conv2(full(sparse(1:step(1):step(1)*R, 1:step(2):step(2)*R, 1)), miniM);
Пример:
>> miniM = [10 20 30; 40 50 60];
>> R = 4;
>> step = [1 2];
>> M = conv2(full(sparse(1:step(1):step(1)*R, 1:step(2):step(2)*R, 1)), miniM)
M =
10 20 30 0 0 0 0 0 0
40 50 70 20 30 0 0 0 0
0 0 40 50 70 20 30 0 0
0 0 0 0 40 50 70 20 30
0 0 0 0 0 0 40 50 60