将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) 解决方案就好了。
查看关于生成整数分区的其他问题:
- Elegant Python code for Integer Partitioning
这是一个在有限情况下有效的解决方案,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())
我正在尝试在 pytorch 中随机生成整数分区(N 分为 M 个部分),最小分区大小为 1。
例如,(3, 1, 1)
和 (4, 1, 0)
都是将 5 分成 3 部分,但是 (4, 1, 0)
的最小分区大小是 0,所以这不应该被允许
我想用它来按需生成我的数据集,如果有 pytorch (parrallel/gpgpu) 解决方案就好了。
查看关于生成整数分区的其他问题:
- Elegant Python code for Integer Partitioning
这是一个在有限情况下有效的解决方案,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())