以增量从向量中提取数据-MATLAB

以增量从向量中提取数据-MATLAB,matlab,Matlab,如何将向量中的数据提取为一系列块?我想不出一个简洁、有效的方法来做到这一点 例如,如果我有一个包含块大小的向量: a= 4 20 5 14 9 以及包含连续数据集的第二向量b b= 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 0 and so on. 作为循环的一部分,所需的输出将是在第一次迭代中用b(1:4)填充c(如a(1)=4),但是在第二次迭代中则需要b(5:24)(如a(2)=20)。接下来的5点将继续。b的长度始终等于a的总和 使用cumsum(a)建立停止点

如何将向量中的数据提取为一系列块?我想不出一个简洁、有效的方法来做到这一点

例如,如果我有一个包含块大小的向量:

a=

4
20
5
14
9
以及包含连续数据集的第二向量
b

b=

1
1
0
1
1
0
1
1
1
1
0
1
1
1
1
0
and so on.
作为循环的一部分,所需的输出将是在第一次迭代中用
b(1:4)
填充
c
(如
a(1)=4
),但是在第二次迭代中则需要
b(5:24)
(如
a(2)=20
)。接下来的5点将继续。
b
的长度始终等于
a
的总和

使用cumsum(a)建立停止点索引。然后,除了累积和+1的最后几点之外,所有的起点都是

idx = cumsum(a)';
s_idx = [1; idx(1:end-1) + 1];
然后索引通过as

for x = 1:length(idx)
    w(...) = b(s_idx(x):idx(x));
end
使用cumsum(a)建立停止点索引。然后,除了累积和+1的最后几点之外,所有的起点都是

idx = cumsum(a)';
s_idx = [1; idx(1:end-1) + 1];
然后索引通过as

for x = 1:length(idx)
    w(...) = b(s_idx(x):idx(x));
end

还可以使用以下命令将数组分块到单元格数组的元素中:


还可以使用以下命令将数组分块到单元格数组的元素中:


您可能可以避免创建
idx
的副本,方法是在其前面加0,从2开始循环,然后提取
b(1+idx(x-1):idx(x)
您可能可以通过在其前面加0,从2开始循环,然后提取
b(1+idx(x-1):idx(x)
来避免创建
idx的副本