1. 程式人生 > >一種用C++自帶的類生成服從正態分佈的隨機數。

一種用C++自帶的類生成服從正態分佈的隨機數。

今天寫關於深度學習的程式碼時,裡面要用服從標準正態分佈的隨機數初始化權值,就是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中,然後顯示這組資料的灰度直方圖,效果還不錯。

灰度直方圖如下: