如何使用C ++以有效方式产生随机数

时间:2019-03-18 12:30:00

标签: python c++ numpy boost

我正在使用boost和QuantLib生成一个包含随机数(标准正态分布)的“数组”。但是,我注意到计算性能不是很理想,并且速度比仅使用numpy的Python要慢得多。谁能给我一些建议? 非常感谢。

这是我的c ++代码:

using namespace QuantLib;
Array generateRandNumbers(unsigned long seed, Size n) { 
    Array res(n);
    boost::mt19937 rnd(seed); 
    boost::normal_distribution<> normDist(0, 1); 
    boost::variate_generator<boost::mt19937&, boost::normal_distribution<>> generator_norm(rnd, normDist); 
    BOOST_FOREACH(Real& x, res) x = generator_norm();

    return res;
}

int main() 
{
    unsigned long seed = 1; 
    Size n = 1e6;
    boost::timer timer;
    Array randNumbers = generateRandNumbers(seed, n); 
    std::cout << timer.elapsed() << std::endl; 
    return 0
}

这是我的python代码:

import numpy as np
import time

ts = time.time()
res = np.random.normal(0, 1, 1000000); 
print(time.time() - ts)

1 个答案:

答案 0 :(得分:-1)

您问过:

  

有人可以给我一些建议吗?

在这里编程语言不太可能成为主要因素。因此,这个问题归结为其他参数:

  1. 使用随机数算法(例如Mersenne Twister)
  2. 可能会影响性能的算法的实现细节
  3. 如何编译,链接和运行代码。 (发布,调试会话,编译器优化)

关于最后一点-确保进行比较时,您始终使用优化的发行版。