gpt4 book ai didi

python - 生成随机数列表,总和为 1

转载 作者:IT老高 更新时间:2023-10-28 20:24:24 28 4
gpt4 key购买 nike

  • 此问题与 Getting N random numbers whose sum is M 不重复因为:
    1. 大多数答案都是关于理论的,而不是 Python 中的特定编码解决方案来回答这个问题
    2. 此处接受的答案比回答此问题的副本中的一个答案早 5 年。
    3. 已接受的重复答案无法回答此问题

如何列出 N 个(比如 100)个随机数,使它们的总和为 1?

我可以制作一个随机数列表

r = [ran.random() for i in range(1,100)]

我将如何修改它以使列表总和为 1(这是用于概率模拟)。

最佳答案

最简单的解决方案确实是取N个随机值并除以总和。

更通用的解决方案是使用 Dirichlet distribution这是available in numpy .

通过改变分布的参数,你可以改变单个数字的“随机性”

>>> import numpy as np, numpy.random
>>> print np.random.dirichlet(np.ones(10),size=1)
[[ 0.01779975 0.14165316 0.01029262 0.168136 0.03061161 0.09046587
0.19987289 0.13398581 0.03119906 0.17598322]]

>>> print np.random.dirichlet(np.ones(10)/1000.,size=1)
[[ 2.63435230e-115 4.31961290e-209 1.41369771e-212 1.42417285e-188
0.00000000e+000 5.79841280e-143 0.00000000e+000 9.85329725e-005
9.99901467e-001 8.37460207e-246]]

>>> print np.random.dirichlet(np.ones(10)*1000.,size=1)
[[ 0.09967689 0.10151585 0.10077575 0.09875282 0.09935606 0.10093678
0.09517132 0.09891358 0.10206595 0.10283501]]

根据主要参数,狄利克雷分布将给出所有值都接近 1./N 的向量,其中 N 是向量的长度,或者给出向量的大多数值约为 0 的向量,并且会有一个 1,或者在这些可能性之间给出一些东西。

编辑(原始答案后 5 年):关于 D​​irichlet 分布的另一个有用事实是,如果您生成一组 Gamma 分布的随机变量,然后将它们除以它们的总和,您自然会得到它。

关于python - 生成随机数列表,总和为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659858/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com