隨機數產生器RNG

2021-07-02 23:40:56 字數 1147 閱讀 1869

用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

隨機數產生器RNG

用opencv做演算法的朋友們肯定為隨機數煩惱過,新版本一直支援隨機數產生器啦,而且還繼續支援之前版本的c格式的函式,不過與時俱進,我這裡介紹c 的rng類。它可以壓縮乙個64位的i整數並可以得到scalar和array的隨機數。目前的版本支援均勻分布隨機數和gaussian分布隨機數。隨機數的產生...

隨機數產生器

最近在學習c 自己沒事做的關於隨機數和winform的練習 附上 using system using system.collections.generic using system.componentmodel using system.data using system.drawing usin...

opencv中用RNG產生隨機數

1.1 rng rng類是opencv裡c 的隨機數產生器。它可產生乙個64位的int隨機數。目前可按均勻分布和高斯分布產生隨機數。隨機數的產生採用的是multiply with carry演算法和ziggurat演算法。1.1.1 產生乙個隨機數 rng可以產生3種隨機數 rng int seed...