有没有办法使用armadillo c ++库在c ++中设置独立的随机流?

时间:2015-03-16 23:57:08

标签: c++ random armadillo

我想要来自armadillo rand库的两个独立的随机流。看起来他们都使用相同的全局随机流。

我可以通过以下方式使用armadillo库生成随机数:

arma::arma_rng::set_seed(13)
double r = arma::randu()

但我不知道如何获得两个随机流。在python中,我知道我可以使用numpy中的随机库进行以下操作:

rn = random.RandomState(13)
rn2 = random.RandomState(11)

现在,如果我运行rn.rand()和rn2.rand(),它们是独立的,不会相互影响。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

独立随机数生成器可与Armadillo中的.imbue()函数结合使用。

以下代码改编自Armadillo documentation。需要C ++ 11编译器才能使用std::mt19937std::uniform_real_distribution

std::mt19937 engine1;  // Mersenne twister random number engine
std::mt19937 engine2;

// ... set the seeds for engine1 and engine2 here ...

std::uniform_real_distribution<double> distr(0.0, 1.0);

mat A(4,5);
mat B(4,10);

A.imbue( [&]() { return distr(engine1); } );
B.imbue( [&]() { return distr(engine2); } );

关于梅森引擎的更多信息:http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine

有关std :: uniform_real_distribution的更多信息:http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution