我想要来自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(),它们是独立的,不会相互影响。有什么想法吗?
谢谢!
答案 0 :(得分:1)
独立随机数生成器可与Armadillo中的.imbue()函数结合使用。
以下代码改编自Armadillo documentation。需要C ++ 11编译器才能使用std::mt19937
和std::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