我使用cygwin64(或minGW)下的Armadillo软件包(v.7.300.1)生成带有randoms的矩阵:
#include<armadillo>
int main(){
arma::mat(3,3, arma::fill::randu).print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序(重新构建或重新运行后)始终生成:
0.6900 0.5548 0.2074
0.5054 0.3784 0.6263
0.5915 0.2577 0.3401
Run Code Online (Sandbox Code Playgroud)
为什么总是一样的?怎么了?
你忘了设置种子以引入随机性.回想一下,所有(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$
Run Code Online (Sandbox Code Playgroud)
如果您想要可重现的结果,您希望使用其他变量并跟踪种子值.
编辑:在2018年末,随着更新版本的Armadillo,现在需要链接,所以请制作它g++ -o armaRand armaRand.cpp -larmadillo.其余的仍然成立:通过用(足够的)随机位播种随机数发生器,我们可以得到预期的不同答案.
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |