我看过其他帖子解决类似的问题。我知道如何生成 N 个正整数。我还知道如何限制随机生成的整数的总和。唯一的问题是满足 N 个值都不超出指定范围的条件。
e.g. generate_ints(n, total, low, high)
应该生成 n 个值数组,使得每个值都在低值和高值之间,并且总和等于总数。任何指示/帮助将不胜感激。
e.g.generate_ints(4, 40, 4, 15)
应该生成类似的东西
[7,10,13,10]
我不在乎数字是否重复,只要它们不是高度倾斜即可。我在用np.randon.randint(5,15,n)
选择整数。
到目前为止,我已经尝试过以下方法,但它不起作用 -
import numpy as np
import random
from random import uniform as rand
total=50
n=10
low=2
high=15
result=[]
m=0
nobs=1
while nobs <= n:
if m >= (total - low):
last_num= total -new_tot
result.append(last_num)
else:
next_num=np.random.randint(low,high,1)
new_tot = sum(result) + next_num
result.append(next_num)
m=new_tot
nobs +=1
print result
print sum(result)
再次感谢。