我在 cygwin64(或 minGW)下使用 Armadillo 包(v.7.300.1)生成一个随机矩阵:
#include<armadillo>
int main(){
arma::mat(3,3, arma::fill::randu).print();
return 0;
}
程序(在重新构建或重新运行后)总是生成:
0.6900 0.5548 0.2074
0.5054 0.3784 0.6263
0.5915 0.2577 0.3401
为什么总是一样?怎么了?
最佳答案
您忘记设置种子以引入随机性。回想一下,所有 (Q)RNG 都是确定性的。你在这里看到的,康拉德会称之为功能。
从文档:
To change the RNG seed, use
arma_rng::set_seed(value)
orarma_rng::set_seed_random()
functions.
演示
稍微修复的文件版本:
/tmp$ cat armaRand.cpp
#include<armadillo>
int main(){
arma::arma_rng::set_seed_random();
arma::mat(3,3, arma::fill::randu).print();
exit(0);
}
/tmp$ g++ -o armaRand armaRand.cpp
/tmp$ ./armaRand
0.8824 0.4457 0.3589
0.7134 0.4768 0.8335
0.0171 0.4119 0.3720
/tmp$ ./armaRand
0.3417 0.3643 0.6865
0.2814 0.0191 0.6797
0.9737 0.1593 0.5013
/tmp$
如果您想要可重现的结果,您需要使用其他变体并跟踪种子值。
编辑:在 2018 年末使用更新版本的 Armadillo ,现在似乎需要链接,所以请让它
g++ -o armaRand armaRand.cpp -larmadillo
.其余的仍然成立:通过用(足够)随机位播种随机数生成器,我们确实得到了预期的不同答案。
关于random - Armadillo 生成相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38999846/