Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据概率从一系列值中随机选取一个数字_C#_Probability - Fatal编程技术网

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

C# 根据概率从一系列值中随机选取一个数字,c#,probability,C#,Probability,假设我有一个从1到10的值范围。我想根据某种高斯概率从这个范围内随机选取一个数字。因此,在4,5,6左右获得值的几率更高。仍然有机会获得1分和10分,但机会较小。它不需要完全遵循高斯分布,因为1和10的值几乎不可能得到。我希望的是,至少改变和扭曲获得极值的机会,同时传播获得其他值的机会。通过倾斜,我的意思是,有时我希望得到10的机会大于1。因此,分布不一定是对称的 我试着使用random类来设置一个随机浮点值,并将该值乘以10,但结果可能仍然是线性的。我想不出我怎么能做到。有没有一个简单的方法来

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

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

这可能会帮助您:

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

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和
值之间的数字(索引)。长度
。最后返回值[索引]。

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

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


请查看的答案以获取实现。

这可能与此相关:谷歌对“C#gaussian random”的第一个搜索结果是:。你试过了吗?也许我应该把我的问题说清楚。我并不是在寻找一个精确的高斯分布。高斯分布是对称的。我希望我的分布有时会偏向一边或另一边。@Carven这当然是可能的。您需要准确地确定您想要什么,以及如何创建一个算法来根据一些均匀分布的输入值生成这样的分布。具体的实现将取决于您想要的分发的具体情况。对于应用范围既静态又小的分发函数,像这样的预计算查找对于不那么复杂的分发函数非常有效。如果这些断言中的任何一个不适用(我怀疑它们都适用),那么这就不是一个实际的解决方案。