如何使用标准::normal_distribution
How to use std::normal_distribution
我是一个经验丰富的C程序员,偶尔会被迫使用一点C++。
我需要从具有各种均值和方差的正态分布生成随机数。如果我有一个 C 函数来执行此操作,称为 normal(float mean, float var)
那么我可以编写以下代码:
int i;
float sample;
for(i = 0;i < 1000;i++)
{
sample = normal(mean[i],variance[i]);
do_something_with_this_value(sample);
}
请注意,i 的每个值都有不同的均值和方差。
C 不包含一个叫做 normal 的函数,但C++包含,实际上它叫做 std::normal_distribution。不幸的是,我的C++不足以理解文档中的语法。谁能告诉我如何使用 std::normal_distribution 实现我的 C 代码的功能。
std::normal_distribution
不是函数而是模板化类
你可以像这样使用它:
#include <random>
int main(int, char**)
{
// random device class instance, source of 'true' randomness for initializing random seed
std::random_device rd;
// Mersenne twister PRNG, initialized with seed from previous random device instance
std::mt19937 gen(rd());
int i;
float sample;
for(i = 0; i < 1000; ++i)
{
// instance of class std::normal_distribution with specific mean and stddev
std::normal_distribution<float> d(mean[i], stddev[i]);
// get random number with normal distribution using gen as random source
sample = d(gen);
// profit
do_something_with_this_value(sample);
}
return 0;
}
相关文章:
- 将一个小的 C 定义重写为"normal" C++函数
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 用户定义文字的每个"normal"使用都是未定义的行为吗?
- 函数模板和函数之间奇怪的不一致"normal"
- 在调试中,如何知道对函数的重复调用中参数的统计数据(max-min,average,distribution..)
- Box muller distribution
- 将"normal"标准::字符串转换为 utf-8
- 调用了基运算符而不是派生的one-Normal行为
- Direct X & HLSL - Normal ReComputing
- normal()总是给出负值
- 如何在 c++ 中的 Normal 或 Singleton 类中 GoogleTest 私有方法/枚举类
- boost::math::p df(distribution, value) 是否使用查找表或在每次调用时计算 exp(
- 犰狳inplace_plus明显慢于"normal"加操作
- Eclipse CDT 将"normal folder"转换为"source folder",反之亦然
- Qt Qml in a normal Qt application
- 为什么派生类中复制/移动函数"normal"实现的行为会有所不同,具体取决于它们的定义方式?
- C++中是否有"normal"一元逻辑运算符
- OpenGL glVertexAttribPointer normal
- Dirichlet distribution with RcppGSL
- C++:标准::矢量::调整大小与 "normal"分配