Вот векторизованный вариант с masking
-
def take_sliced_regions(a, start, take, skip):
r = np.arange(len(a))-start
return a[r%(take+skip)<take]
Пример выполнения -
In [90]: a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4,1,2])
In [91]: take_sliced_regions(a, start=1, take=3, skip=3)
Out[91]: array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2])