2 回答

TA贡献1943条经验 获得超7个赞
确保 的每个元素a恰好包含在一个块中的一种方法是a首先创建一个随机排列,然后将其拆分为np.split。
为了np.split从中获取一组拆分索引chunk_size,您可以使用np.cumsum.
例子
>>> import numpy as np
>>> np.random.seed(13)
>>> a = np.arange(20)
>>> b = np.random.permutation(a)
>>> b
array([11, 12, 0, 1, 8, 5, 7, 15, 14, 13,
3, 17, 9, 4, 2, 6, 19, 10, 16, 18])
>>> chunk_size = [10, 5, 3, 2]
>>> np.cumsum(chunk_size)
array([10, 15, 18, 20])
>>> np.split(b, np.cumsum(chunk_size))
[array([11, 12, 0, 1, 8, 5, 7, 15, 14, 13]),
array([ 3, 17, 9, 4, 2]), array([ 6, 19, 10]), array([16, 18]),
array([], dtype=int64)]
您可以通过省略 中的最后一个值来避免尾随空数组chunk_size,因为它由 的大小a和先前值的总和暗示:
>>> np.split(b, np.cumsum(chunk_size[:-1])) # [10, 5, 3] -- 2 is implied
[array([11, 12, 0, 1, 8, 5, 7, 15, 14, 13]),
array([ 3, 17, 9, 4, 2]), array([ 6, 19, 10]), array([16, 18])]

TA贡献2003条经验 获得超2个赞
import numpy as np
np.random.seed(13)
dist = np.arange(0, 3286, 1)
chunk_size = [975, 708, 515, 343, 269, 228, 77, 57, 42, 33, 11, 9, 7, 4, 3, 1, 1, 1, 1, 1]
dist = [np.random.choice(dist,_, replace=False) for _ in chunk_size]
添加回答
举报