一種用C++自帶的類生成服從正態分佈的隨機數。
阿新 • • 發佈:2018-12-27
今天寫關於深度學習的程式碼時,裡面要用服從標準正態分佈的隨機數初始化權值,就是matlab裡面那個randn函式,網上找了很多方法,最後發現C++本身就有自帶的方法生成服從正態分佈的隨機數序列。下面給出C++程式碼:
C++程式碼:
#include <iostream>
#include <string>
#include <random>
#include <iomanip>//設定精度
#include <fstream>
using namespace std;
int main()
{
//default_random_engine generator;//如果用這個預設的引擎,每次生成的隨機序列是相同的。
random_device rd;
mt19937 gen(rd());
//normal(0,1)中0為均值,1為方差
normal_distribution<double> normal(0,1);
ofstream ofs;
//將結果寫到檔案
string path="result.txt";
ofs.open(path,ios::out);
for(int n=0; n<10000; ++n) {
for (int j = 0;j<20;++j)
{
ofs<<setprecision(4 )<<normal(gen)<<" ";
}
}
ofs.close();
return 0;
}
我將這個方法生成10 000*20個數,並將它們儲存到”result.txt”中,然後將這個檔案中的資料拷貝到matlab中,然後顯示這組資料的灰度直方圖,效果還不錯。
灰度直方圖如下: