将N整数并行分割成M份

Integer partition N into M parts in parallel

我正在尝试在 pytorch 中随机生成整数分区(N 分为 M 个部分),最小分区大小为 1。

例如,(3, 1, 1)(4, 1, 0) 都是将 5 分成 3 部分,但是 (4, 1, 0) 的最小分区大小是 0,所以这不应该被允许

我想用它来按需生成我的数据集,如果有 pytorch (parrallel/gpgpu) 解决方案就好了。

查看关于生成整数分区的其他问题:

这是一个在有限情况下有效的解决方案,M 必须除以 N,2 必须除以 M,最大值是有限的,但这是我想要的行为。

您从相等的分区开始,然后计算总和为零的增量...

M = 4
N = 16
MINIMUM = 1
assert N % M == 0
assert M % 2 == 0
avg = N // M

equal_partition = torch.full((M,), avg)
half_delta = torch.randint(-(avg-MINIMUM), avg-MINIMUM, (M // 2,))
delta = torch.cat((half_delta, -half_delta), dim=-1)[torch.randperm(M)]
partition = equal_partition + delta
print(partition, partition.sum())