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

2024-04-26 06:45:48 发布

您现在位置:Python中文网/ 问答频道 /正文

最简单/最优雅的方法是什么来创建一个整数序列,以便在numpy中省略每个n元素k数字?你知道吗

序列很大,我想尽量避免循环。你知道吗

例如:

n = 4
k = 2

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

Tags: 方法numpy元素output序列数字整数省略
2条回答
seq = numpy.arange((n+k)*10).reshape(-1,n+k)[:,:n].flatten()

根据需要创建尽可能多的基本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])

相关问题 更多 >