整数将N并行划分为M个部分



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

例如,(3, 1, 1)(4, 1, 0)都是5分成3部分的分区,但(4, 1, 0)的最小分区大小是0,因此不应该允许

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

参见关于生成整数分区的其他问题:

  • 在Python中生成整数n为k个部分的受限弱整数组合(或分区)
  • 整数分区的优雅Python代码

这是一个在有限情况下有效的解决方案,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())

最新更新