2017-02-05 6 views
-1

正規分布から10000個の乱数を生成したい。次の行は私に一度に一つの数字を与えました。それらを生成するより速い方法がありますか?おそらくループを避ける?C++はループなしで複数の乱数を生成する

std::default_random_engine generator; 
    std::normal_distribution<double> distribution(0.0,1.0); 
    double number[10000]; 
    for (int i =0; i< 10000; i++) 
    number[i] = distribution(generator); 
+0

_ "おそらくループを避けるのですか?" _どこかにループがある必要がありますか? –

+0

わかりません。 PythonまたはMATLABでは、ループなしで実行できます。 –

+2

ループはおそらくそこの内部関数で実行され、そのデータを作成します。そのループを別の関数に入れても、パフォーマンスは向上しません。 –

答えて

4

std::generate_nを使用して明示的にループを書き込むことを避けることができます。

これはです。極端には、でも速度に大きな違いはありません。スピードは、それを呼び出すループのコードよりも、使用する乱数ジェネレータの影響を強く受けます。

std::default_random_engineよりstd::mt19937を使用することをアドバイスしていますが、速度は大幅に向上することはありません(しかし、乱数の品質が向上することははっきりしています)。