ПРИМЕЧАНИЕ: Это решение для целых чисел, поскольку в исходном вопросе представлен только целочисленный регистр.
Сначала выясните, сколько элементов включено в интервал
dCon = diff(conditions,[],2)+1;
Затем создайте возрастающую последовательность индексов для максимального количества элементов (этот список был бы огромен для случая с плавающей запятой, и, таким образом, это решение, практически / эффективно, не распространяется на числа с плавающей запятой)
idx0 = repmat(1:max(dCon),length(dCon),1);
Ограничьте слишком большие индексы
idx0(idx0>dCon)=1;
Теперь добавьте начальную точку
idx = idx0 + conditions(:,1)-1;
Теперь idx
содержит все числа, которые вы хотите изменить.Используйте ismember
, чтобы найти все элементы в main
и изменить их на 1
.
main(ismember(main(:,1),idx(:)),2)=1;
РЕДАКТИРОВАТЬ: Это полный пример с вектором из Gnovice в комментариях
main = zeros(10, 2);
main(:, 1) = [1; 2; 2; 2; 3; 3; 4; 6; 6; 8];
conditions = [2, 3; 6, 8]
dCon = diff(conditions,[],2)+1;
idx0 = repmat(1:max(dCon),length(dCon),1);
idx0(idx0>dCon)=1;
idx = idx0 + conditions(:,1)-1;
main(ismember(main(:,1),idx(:)),2)=1;