当前位置: 首页 > 知识库问答 >
问题:

根据概率从一系列值中随机选取一个数字

陶福
2023-03-14

假设我有一个从1到10的值范围。我想根据某种高斯概率从这个范围中随机选择一个数字。所以,有更高的机会得到大约4,5,6的值。仍然有机会得到1和10,但机会更小。它不需要完全遵循高斯分布,因为那样1和10的值几乎是不可能得到的。我希望至少改变和歪曲得到极值的机会,同时分散得到其他值的机会。通过倾斜,我的意思是有时我希望得到10的机会大于1。所以分布不一定是对称的。

我试着使用random类创建一个随机浮点值,然后将该值乘以10,但结果可能仍然是线性的。我想不出我怎么能做到。有没有一个简单的方法来实现这一点?

共有2个答案

艾翼
2023-03-14

这可能会帮助您:

将概率函数应用于值1到10。然后你得到他们的频率。现在制作一个数组,每个数组根据频率重复1到10的值。例如:

int[] values = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 10 };

现在,您可以使用随机变量,获得一个介于0和值之间的数字(索引)。长度。最后返回值[index]。

高承望
2023-03-14

在C#中,来自Random的值具有均匀的分布,因此将它们乘以某个常数只会改变值的范围。

但是,使用Box-Muller变换,可以使用两个均匀随机变量创建高斯分布。

查看此问题的答案以获取实现。

 类似资料:
  • 问题内容: 如何根据分配给每一行的概率机会从数据库中选择随机行。 例子: 如何根据必须选择的可能性来选择随机的品牌名称及其值。 和可以结合使用吗?如果是这样,最好的方法是什么? 问题答案: 您可以通过使用然后再使用累积和来执行此操作。假设它们的总和为100%: 笔记: 在子查询中被调用一次以初始化变量。多次调用是不可取的。 随机数极有可能恰好位于两个值之间的边界上。的任意选择1。 通过在时停止子查

  • 问题内容: 我有一个数字值数组,我想从该数组中随机选择一个值,然后将其插入变量中。 我不确定您需要查看什么代码。所以, 这是我用来生成13个数字(1-13)并将其插入到数组中的循环。 效果很好,但是现在我需要从该数组中选择2个随机值(然后将其插入变量中,以备后用。 我到过很多网站,已经看到了类似的事情,例如将值插入到数组中,然后用于从数组中选择值,然后从数组中删除它。但是,无论何时我使用它都行不通

  • 我想知道(例如在Java中)在特定范围内生成随机数的最佳方法是什么,其中每个数都有一定的发生概率? e. g. 从[1;3]中生成概率如下的随机整数: P(1)=0.2 P(2)=0.3 P(3)=0.5 现在,我正在考虑在[0;100]范围内生成一个随机整数的方法,并执行以下操作: 如果在[0; 20]以内--

  • 问题内容: 如果我有这样的枚举: 随机挑选一个的最佳方法是什么?它不需要是生产质量的防弹产品,但是相当均匀的分配将是不错的选择。 我可以做这样的事情 但是有更好的方法吗?我觉得这是之前已解决的问题。 问题答案: 我唯一建议的是缓存结果,因为每个调用都会复制一个数组。另外,不要每次都创建一个。保持一个。除此之外,您在做什么都很好。所以:

  • 如果我有这样的枚举: 随机挑选的最佳方式是什么?它不需要是生产质量的防弹产品,但一个相当均匀的分布将是很好的。 我可以做这样的事 但是有没有更好的方法呢?我觉得这是以前解决过的问题。

  • 每次运行代码时,我都需要从下面的json中选择任意随机值。我在空手道中怎样才能做到这一点呢?我需要得到任何随机值,并在另一个功能文件中使用。