创建整数序列的最简单/最优雅的方法是什么,以便省略每个 n 元素 k 数字?
序列很大,我想尽可能避免for循环。
E.g:
n = 4
k = 2
desired output = {0,1,2,3,6,7,8,9,12,13,14,15,...}
答案 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])