Вот векторизованный способ, использующий логические сравнения с неявным расширением , find
и accumarray
.
Давайте рассмотрим более общий пример, где некоторые диапазоны в tr
не появляются в v
или появляются более одного раза:
tr = [99 143 10 20 40 99];
v = [9 79 97 190 205 278 293 304 99 143];
Тогда
c = (tr(1:2:end) >= v(1:2:end).') & (tr(2:2:end) <= v(2:2:end).'); % subrange conditions
[ii, jj] = find(c); % row and column indices of true entries
result = accumarray(jj, ii, [numel(tr)/2 1], @(t){v([2*t-1 2*t])}); % build result
дает
>> celldisp(result)
result{1} =
97 190
99 143
result{2} =
9 79
result{3} =
[]
означает, что первый диапазон в tr
(99 143
) содержится в двух диапазонах в v
(97 190
и 99 143
), второй в одном, третий в нуле.