random - Armadillo 生成相同的随机数

标签 random armadillo

我在 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) or arma_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/

相关文章:

php - 将 ORDER BY RAND() 与多个 WHERE 子句一起使用 mysql

ios - 1 个部分中带有随机重用标识符的 UICollectionView

python - 作为输入输入时,字典中的随机键无法识别其值

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

mysql - 在具有单独 LIMIT 语句的 MySQL UNION 查询中使用 ORDER BY RAND()

linker - Armadillo + BLAS + LAPACK : Linking error?

r - RcppArmadillo 中的函数通过引用传递

c++ - 带 Armadillo 的整数矩阵的行列式

c++ - 如何用 Armadillo 加载matlab矩阵?

c++ - 在每台计算机上生成相同的随机排列