我将如何列出N个(例如100个)随机数,使其总和为1?
我可以用
r = [ran.random() for i in range(1,100)]
我将如何修改此列表,使其总数为1(这是用于概率模拟)。
实际上,最简单的解决方案是采用N个随机值并除以和。
一种更通用的解决方案是使用Dirichlet发行版
http://en.wikipedia.org/wiki/Dirichlet_distribution
(可在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年后):关于Dirichlet分布的另一个有用的事实是,如果您生成Gamma分布的一组随机变量,然后将它们除以它们的总和,就自然可以得到它。
test的之和为15; 假如我总数为29, 生成15个框(根据test的之和15就生成15个框)的数据:如下图() 下面写的这个方法:在第14个框的值为27-29之间的数据,第15个框的值为负数了,请问这个方法能优化下吗?或者还有其他方法吗?
本文向大家介绍如何生成一个随机数?相关面试题,主要包含被问及如何生成一个随机数?时的应答技巧和注意事项,需要的朋友参考一下
问题内容: 我需要在Java中随机生成一个具有7个插槽的数组。所有这些插槽的值都必须至少为1,但总和必须为另一个已定义数字的总和。它们也都必须是int值,不能为1.5或0.9816465684646数字。例: 我希望它生成类似的内容,但是如果int a = 15,则所有数字按任何顺序总计15 问题答案: 生成添加到给定总和的N个随机数的标准方法是将您的总和视为数字行,在该行上生成N-1个随机点,对
random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando
问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实
问题内容: 我正在寻找生成一个随机数,该随机数不在另一张桌子上。 例如:如果一个表称为具有值。 除上述值外,我还想生成一个数字。 我尝试了以下查询。 询问 但是有时此查询不返回任何内容。 因为那时候它生成表中存在的数字。 如何解决这个问题? 小提琴供参考 问题答案: 另一个选择,我一直喜欢随机排序,并且交叉联接非常有效地创建了许多行: 演示:SQL Fiddle