从数组中提取等间距子阵列

时间:2016-04-08 10:09:42

标签: arrays matlab

我有一个数组:

v = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];

我想从v的第五个元素开始,从6个元素中提取多个长度为3的数组,然后将它们组合在一起:

v1 = [5 6 7];
v2 = [11 12 13];
v3 = [17 18 19];

v_combined = [5 6 7 11 12 13 17 18 19];

有没有简单的方法可以在不使用for循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:3)

您可以使用逻辑索引来完成。您需要创建一个像这样的索引掩码

idx = [0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0]

你可以这样创建:

idx = false(size(v))
k = 5
idx(k:end) = ~mod(floor((0:numel(v)-k)/3),2)

最后

v_combined = v(idx)

答案 1 :(得分:1)

一般情况下m元素n元素空间从k开始,您可以使用

k=5;
m=3;
n=6;

I=1:numel(v);
v_combined = v((I>=k) & mod(I-k,n)<m)