我使用cygwin64(或minGW)下的Armadillo软件包(v.7.300.1)生成带有randoms的矩阵:
#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
为什么它总是一样的?怎么了?
答案 0 :(得分:8)
您忘记设置种子以引入随机性。回想一下,所有(Q)RNG都是确定性的。你在这里看到的,康拉德会称之为一个特色。
来自文档:
要更改RNG种子,请使用
arma_rng::set_seed(value)
或arma_rng::set_seed_random()
个功能。
文件的略微修复版本:
/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
。其余的仍然是:通过播种随机数生成器(充分)随机位,我们会得到预期的不同答案。