python随机生成数字列表_如何生成一个随机数的列表,使它们的和等于随机选择的数字...

先考虑连续做。暂时我们不关心最终数,所以让我们在区间[0…1]中均匀抽样X_i,使它们的和等于1X_1 + X_2 + ... X_n = 1

这就是众所周知的分布,称为Dirichlet分布,或称伽马变量,或单纯形抽样。请参阅Generating N uniform random numbers that sum to M上的详细信息和讨论。可以使用random.gammavariate(a,1)或正确处理角点,参数为1的伽马变量为等效指数分布,下面是直接采样代码

^{pr2}$

所以从simplex_sampling开始,你就有了向量和求和作为标准化。在

因此,把它用于,比如N=5N = 5

sum, r = simplex_sampling(N)

norm = float(N)/sum

# normalization together with matching back to integers

result = []

for k in range(N):

# t is now float uniformly distributed in [0.0...N], with sum equal to N

t = r[k] * norm

# not sure if you could have zeros,

# and check for boundaries might be useful, but

# conversion to integers is trivial anyway:

# values in [0...1) shall be converted to 0,

# values in [1...2) shall be converted to 1, etc

result.append( int(t) )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值