Matlab 将数组嵌入到另一个数组中
我有两个数组。第一个是连续的,如:Matlab 将数组嵌入到另一个数组中,matlab,vectorization,Matlab,Vectorization,我有两个数组。第一个是连续的,如: seq1 = 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 ...continues 第二个是: seq2 = 2 250 3 260 5 267 6 270 8 280 10 290 13 300 18 310 20 320 21 330 ...continu
seq1 =
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
...continues
第二个是:
seq2 =
2 250
3 260
5 267
6 270
8 280
10 290
13 300
18 310
20 320
21 330
...continues
我需要将seq2嵌入到seq1中,以这样的方式结束序列:
seq3 =
1 0
2 250
3 260
4 260
5 267
6 270
7 270
8 280
9 280
10 290
11 290
... continues
我可以用循环来实现这一点,但是数组非常大,所以我不想用两个来实现循环,这需要花费太长的时间。如何以矢量化的方式执行此操作?我认为这符合您的要求:
[~, jj, vv] = find(sum(bsxfun(@le, seq2(:,1), seq1(:,1).'), 1));
seq3 = seq1;
seq3(jj,2) = seq2(vv,2);
工作原理
通过计算seq2第一列中有多少值小于或等于第一列或seq1代码中的每个值,即可获得所需索引sumbsxfun@le1.这将用于从seq2的第二列中选择适当的条目,并将其写入结果。但在此之前,需要放弃此索引中的值0。这是使用三个输出版本的find code[~,jj,vv]=find…完成的。如果第二列数据总是在增加,您可以使用和轻松解决此问题: 以下是您从示例输入中获得的信息:
seq3 =
1 0
2 250
3 260
4 260
5 267
6 270
7 270
8 280
9 280
10 290
11 290
12 290
13 300
14 300
15 300
16 300
17 300
18 310
19 310
20 320
21 330
它是如何工作的。。。
连接seq1和seq2后,accumarray收集第二列中与第一列中的值相同的所有值,即值2的[0 250],然后获取每组的值。然后,使用函数cummax将以前的非零值填充任何零值。最后,将索引列添加到新序列中
seq3 =
1 0
2 250
3 260
4 260
5 267
6 270
7 270
8 280
9 280
10 290
11 290
12 290
13 300
14 300
15 300
16 300
17 300
18 310
19 310
20 320
21 330