我正在寻找一种方法来生成一组具有指定的平均值和性病的整数。偏差。生成一组大小为N的整数的最佳方法,如正态分布,给定均值和标准差。偏差
使用随机库,它可以生成一组分布在高斯的方式随机双打,这将是这个样子:
#include <tr1/random>
std::tr1::normal_distribution<double> normal(mean, stdDev);
std::tr1::ranlux64_base_01 eng;
eng.seed(1000);
for (int i = 0; i < N; i++)
{
gaussiannums[i] = normal(eng);
}
但是,对于我的申请,我需要整数,而不是双打。所以我的问题是,你如何产生上述的等价物,而不是双数的整数?采取一种可能的路径是在双打转换成整数,以某种方式,但我不知道有足够的了解随机库是如何工作的知道这是否能以一种方式,真正保留了钟形,平均/ STD完成。偏差。
我应该提到的是,这里的目的与其说是随机性的,因为它是获得一组特定大小的整数,用正确的均值和性病。偏差。
理想我也想指定的最小和可产生最大的价值,但我还没有找到任何办法,甚至对双打做到这一点,所以在这个任何建议也欢迎。
当您说“高斯”时,您确实指定了最小值和最大值。你或者需要指定你的目标是什么(你需要什么样的随机性),而不是你的方法(生成“高斯”整数),或者返回并研究统计数据,以便理解为什么你的问题没有意义。 (其中,要生成整数,你需要一个离散分布,但高斯是连续的)。 –
我有点看到你的观点,但我仍然认为这很有道理。我想要做的是生成一系列分布在一定范围内的整数,满足给定的均值和标准。开发。这是最重要的部分,但我也希望这些整数形成一个钟形曲线,尽管它不能是严格的高斯曲线,但我希望它尽可能地保留这个属性。也许四舍五入实际上就是这样吗? – ChrKroer
然后我建议你在你感兴趣的整数范围内计算一个高斯CDF,稍微拉伸以解释缺失的尾部,并将它存储在一个数组中。然后在[0:1]范围内生成一致实数,并使用二分搜索来反转CDF。这个从任意CDF生成样本的过程非常标准。 –