RNG—隨機數產生器


RNG 隨機數產生器

RNG g_rng(12345);

 /******************************************************************************************************/

用OpenCV做算法的朋友們肯定為隨機數煩惱過,新版本一直支持隨機數產生器啦,而且還繼續支持之前版本的c格式的函數,不過與時俱進,我這里介紹C++的RNG類。它可以壓縮一個64位的i整數並可以得到scalar和array的隨機數。目前的版本支持均勻分布隨機數和Gaussian分布隨機數。隨機數的產生采用的是Multiply-With-Carry算法和Ziggurat算法。

其構造函數的初始化可以傳入一個64位的整型參數作為隨機數產生器的初值。next可以取出下一個隨機數,uniform函數可以返回指定范圍的隨機數,gaussian函數返回一個高斯隨機數,fill則用隨機數填充矩陣。

這里介紹一個uniform的使用事項,就是比如利用它產生0~1的隨機數的問題,具體代碼如下:

RNG rng;
// always produces 0
double a = rng.uniform(0, 1);
// produces double from [0, 1)
double a1 = rng.uniform((double)0, (double)1);
// produces float from [0, 1)
double b = rng.uniform(0.f, 1.f);
// produces double from [0, 1)
double c = rng.uniform(0., 1.);
// may cause compiler error because of ambiguity:
// RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0,0.99999)?
double d = rng.uniform(0, 0.999999);

 

就是不能寫成rng.uniform( 0 ,1),因為輸入為int型參數,會調用uniform(int,int),只能產生0。請大家注意使用^_^

還有一些隨機數相關的函數,比如randu可以產生一個均勻分布的隨機數或者矩陣,randn可以產生一個正態分布的隨機數,randShuffle可以隨機打亂矩陣元素

再簡單介紹一下c版本的隨機數產生器的相關函數,有cvRNG、cvRandArr、cvRandInt、cvRandReal

【轉】http://blog.csdn.net/yang_xian521/article/details/6931385


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM