如何使用C 以有效的方式产生随机数
How to produce random number in a efficient way with c++
i正在使用boost和Quartlib产生包含随机数的'数组'(标准正常分布式)。但是,我注意到计算性能不是很可取,而且速度比简单使用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)
您问:
谁能给我一些建议?
编程语言不可能在这里发挥主要因素。因此,这个问题归结为其他参数:
- 使用的随机数算法(例如Mersenne Twister)
- 算法的实施细节可能影响灌注
- 如何编译,链接和运行代码。(发布,调试会话,编译器优化)
至于最后一点 - 确保进行比较时,您始终使用优化的版本构建。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- if数组上的随机数
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 不同/较旧的处理器运行c++代码的方式是否不同
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 重载方法的方式会在使用临时调用时生成编译器错误
- 在reactor中存储eventHandlers的最佳方式是什么
- 如何以优化的方式同时迭代两个间距不相等的数组
- 如何使用C 以有效的方式产生随机数
- 以纯粹的方式使用c++随机数生成器