import numpy as np
x = np.arange(1, 100, 1)
n = 10
# random calculation
sizes = np.random.rand(n)
sizes /= np.sum(sizes)
sizes *= len(x)
# split points
idx = [0] + [int(np.round(np.sum(sizes[:i+1]))) for i in range(n-1)] + [len(x)]
parts = [x[idx[i]:idx[i+1]] for i in range(n)]
print(parts)
3条答案
按热度按时间b4lqfgs41#
你可以用
random.choice
,然后split
对n-1个随机分裂点进行采样:示例(种子=0):
bkhjykvo2#
我很确定这个脚本运行得很好:
输出示例:
hfwmuf9z3#
你可以使用Dirichlet分布乘以数组大小来获得块大小,并累积以获得拆分索引:
如果你希望每个块至少包含一个元素,你可以将大小因子减少
n
,然后将所有块加1: