如何每隔n个术语连续三个数组的术语?

时间:2017-04-02 14:15:24

标签: arrays matlab indexing

有人可以指导我如何使用MATLAB代码从1D向量的每第n个元素中选择一个数组的连续几个项(例如3个)吗?

例如,如果我的阵列是数组= [1 2 3 4 5 6 7 8 9 10 11 12]; 我想连续三个学期后跳四个,所以解决方案是array_solution = [1 2 3 8 9 10];

非常感谢。

2 个答案:

答案 0 :(得分:0)

使用bsxfun添加两个索引向量(列和行):

x = [1 2 3 4 5 6 7 8 9 10 11 12];
len = length(x); % total array length
c = 3; % number of consecutive elements
n = 4; % every nth element
idxs = bsxfun(@plus,(1:c)',0:(c+n):len);
y = x(idxs(:))

    y =

     [1     2     3     8     9    10]

答案 1 :(得分:0)

如果您出于某种原因不想使用bsxfun(或一般的函数调用),这是另一种方法,即每c个元素获得n个连续元素。

x = 1:12;
c = 3;
n = 4;
% One of the two ranges in the indexing expression must be transposed
% so that MATLAB will apply vector expansion
y = x( (0:n+c:end-c) + (1:c)')

    y = 
        1    2    3
        8    9   10

如果您希望结果为1 x m向量,也可以使用下一个代码段。

idxs = (0:n+c:end-c) + (1:c)';
y = x(idxs(:))