вы можете использовать STRFIND , чтобы найти расположение всех четырех последовательных нулей
%# binary row-vector
x = [1 0 0 0 0 1 0 0 0 0 1 0 0 0 0];
%# starting locations of four-consecutive zeros
idx = strfind(x, [0 0 0 0]);
%# random binary numbers (rows) used to replace the consecutive zeros
n = dec2bin(randi([1 15],[numel(idx) 1]),4) - '0';
%# linear indices corresponding to the consecutive-zeros
idx = bsxfun(@plus, idx', (0:3));
%'# replace the 4-zeros
xx = x;
xx(idx(:)) = n(:);
Результат:
>> x
x =
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0
\_______1st_______/
>> xx
xx =
1 1 0 1 0 1 1 1 1 0 1 1 0 1 1
\_______1st_______/
>> n
n =
1 0 1 0 <-- 1st consecutive four-zeros replaced by this
1 1 1 0 <-- 2nd
1 0 1 1 etc...
Обратите внимание, что если начальный вектор x
содержит последовательные нули длиной более 4
, strfind
вернет несколько местоположений в этой более длинной последовательности. Поэтому потребуется дополнительная обработка в зависимости от того, как вы хотите выбрать 4
из более длинной последовательности (первое появление, последнее возникновение и т. Д.)