Python 创建每n个元素跳过k个元素的整数序列

Python 创建每n个元素跳过k个元素的整数序列,python,numpy,Python,Numpy,创建整数序列的最简单/最优雅的方法是什么,以numpy为单位,每n个元素k个数字都被省略 序列很大,我希望尽可能避免循环 例如: 根据需要创建尽可能多的基本n范围序列的重复,按适当的数量进行偏移,展平并丢弃额外的项目: def skip_range(n, k, length): N = (length - 1) // n + 1 # rounded up integer division out = np.empty((N, n), dtype=np.intp) out[

创建整数序列的最简单/最优雅的方法是什么,以numpy为单位,每n个元素k个数字都被省略

序列很大,我希望尽可能避免循环

例如:


根据需要创建尽可能多的基本
n
范围序列的重复,按适当的数量进行偏移,展平并丢弃额外的项目:

def skip_range(n, k, length):
    N = (length - 1) // n + 1 # rounded up integer division
    out = np.empty((N, n), dtype=np.intp)
    out[:] = np.arange(0, N*(n+k), n+k)[:, None]
    out += np.arange(n)
    out.shape = (-1,)
    out.resize(length)
    return out

>>> skip_range(4, 2, 7)
array([0, 1, 2, 3, 6, 7, 8])
>>> skip_range(4, 2, 8)
array([0, 1, 2, 3, 6, 7, 8, 9])
>>> skip_range(4, 2, 9)
array([ 0,  1,  2,  3,  6,  7,  8,  9, 12])

谢谢你的意见。但是它不能在长度为N的任意序列不能被N+k整除的情况下被重塑。你想用这个序列做什么?我想切片一个数组。
seq = numpy.arange((n+k)*10).reshape(-1,n+k)[:,:n].flatten()
def skip_range(n, k, length):
    N = (length - 1) // n + 1 # rounded up integer division
    out = np.empty((N, n), dtype=np.intp)
    out[:] = np.arange(0, N*(n+k), n+k)[:, None]
    out += np.arange(n)
    out.shape = (-1,)
    out.resize(length)
    return out

>>> skip_range(4, 2, 7)
array([0, 1, 2, 3, 6, 7, 8])
>>> skip_range(4, 2, 8)
array([0, 1, 2, 3, 6, 7, 8, 9])
>>> skip_range(4, 2, 9)
array([ 0,  1,  2,  3,  6,  7,  8,  9, 12])