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

时间:2014-09-07 11:10:06

标签: python numpy

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

序列很大,我想尽可能避免for循环。

E.g:

n = 4
k = 2

desired output = {0,1,2,3,6,7,8,9,12,13,14,15,...}

2 个答案:

答案 0 :(得分:1)

seq = numpy.arange((n+k)*10).reshape(-1,n+k)[:,:n].flatten()

答案 1 :(得分:1)

根据需要创建基本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])