C 產生隨機數,隨機序列和隨機分布

2021-10-03 02:51:21 字數 2256 閱讀 7100

1.產生[0 n-1]區間的乙個隨機整數

2.產生乙個[0 1]區間的隨機小數

3.產生乙個[0 n-1]區間的隨機序列(常用於ransac)

4.產生服從某個分布的概率隨機數

1.產生[0 n-1]區間的乙個隨機整數

#include

#include

using

namespace std;

intmain()

}

2.產生乙個[0 1]區間的隨機小數

3.產生乙個[0 n-1]區間的隨機序列意思就是在[0 n-1]之間的n個整數中隨機挑取n個不重複的整數,在ransac中經常被使用到,orbslam2中的ransac八點法求f矩陣使用到了這種方法。

下面**展示了從0-99中隨機挑選8個不重複的數的組合

#include

#include

#include

using

namespace std;

intmain()

for(

int i=

0;isize()

;i++

)for

(int i=

0;isize()

;i++

) cout<

}

這段**選擇了多組這樣的組合,適用於多次的ransac

#include

#include

#include

using

namespace std;

intmain()

for(

int i=

0;i}

4.產生服從某個分布的概率隨機數讀別人**時發現他們經常使用隨機數發生器來產生資料,簡單地總結下用法

包含的標頭檔案是#include

應用上就是定義乙個generator,這種隨機數發生器的種子應該就夠用了

std::default_random_engine generator;

然後定義乙個分布函式xy_rand,此處定義了乙個均勻分布,需要定義的引數是均勻分布的上下限std::uniform_real_distributiondistribution_uniform(-4, 4.0);

另一種經常使用的分布是高斯分布,需要定義的引數是均值和標準差(不是方差),在用作雜訊時均值通常被設定為0,

std::normal_distributiondistribution_normal(0., 10);

示例函式,在x軸方向上產生均勻分布,y方向標準正態分佈,然後描繪二位座標點的分布情況

#include#include#includeusing namespace std;

int main()

{ ofstream out("point_random.txt");

std::default_random_engine generator;

std::uniform_real_distributiondistribution_uniform(-4, 4.0);

std::normal_distributiondistribution_normal(0., 1);

cout<

然後把y軸上的正態分佈的標準差改為10,產生了下面這種情況,符合標準差越大,資料越分散的高斯性質

c 隨機數產生

我們在做能自動生成試卷的考試系統時,常常需要隨機生成一組不重複的題目,在.net framework中提供了乙個專門用來產生隨機數的類system.random。對於隨機數,大家都知道,計算機不可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的演算法對事先選定的隨機種子做複雜的運算,用產生的結...

C 隨機數產生

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...

C 產生隨機數

c 怎樣產生隨機數 這裡要用到的是 rand 函式 srand 函式 c 裡沒有自帶的random int number 函式。1 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand 就可以了 rand 會返回一隨機數值,範圍在0至rand max 間。rand max值至少為32767。例...