MATLAB: Embedding an array into another: vectorization method

coalesevectorization

I have two arrays. The first one is a consecutive sequential one, like:
seq1 =
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
...continues
The second one is like:
seq2 =
2 250
3 260
5 267
6 270
8 280
10 290
13 300
18 310
20 320
21 330
...continues
I need to embed `seq2` into `seq1` in such a way that I end up with the sequence:
seq3 =
1 0
2 250
3 260
4 260
5 267
6 270
7 270
8 280
9 280
10 290
11 290
... continues
I could do this with loops but the arrays are really big so I don't want to use two `for` loops, it is taking too long. How can I do this in a vectorised manner?

Best Answer

seq1 = (1:10);
seq2 = {2,'p';5,'q';7,'r';10,'s';33,'t'};
n = [seq2{:,1}]';
s = seq1(:);
i0 = (min(min(s),min(n)):max(max(s),max(n)))';
[l0,ii] = ismember(i0,n);
idx = cumsum(l0);
t = idx ~= 0;
out = num2cell(i0);
out(t,2) = seq2(idx(t),2);
out(~t,2) = {0};
ADD
A = [
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0 ];
B = [
2 250
3 260
5 267
6 270
8 280
10 290
13 300
18 310
20 320
21 330 ];
Z = (min([A(:,1);B(:,1)]):max([A(:,1);B(:,1)]))';
l0 = ismember(Z,B(:,1));
ii = cumsum(l0);
t = ii ~= 0;
Z(t,2) = B(ii(t),2);