Embedding an array into another: vectorization method

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?

2 Kommentare

dpb
dpb am 25 Mai 2017
What are p, q, r, ... ? Constants, additional vectors, ... ?
Tanmay
Tanmay am 25 Mai 2017
Bearbeitet: Tanmay am 25 Mai 2017
Constant numbers. I've edited the question so its clearer.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 25 Mai 2017
Bearbeitet: Andrei Bobrov am 25 Mai 2017
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);

Weitere Antworten (1)

Stephen23
Stephen23 am 25 Mai 2017
Bearbeitet: Stephen23 am 25 Mai 2017
One very simple and efficient way is to use interp1 with its previous option:
>> 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 = A;
>> Z(:,2) = interp1(B(:,1),B(:,2),A(:,1),'previous')
>> Z =
1 NA
2 250
3 260
4 260
5 267
6 270
7 270
8 280
9 280
10 290

2 Kommentare

+1
Z = (min([A(:,1);B(:,1)]):max([A(:,1);B(:,1)]))';
Z(:,2) = interp1(B(:,1),B(:,2),Z,'previous');
Wasn't aware of this function, thank you!

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by