【发布时间】:2019-03-18 12:29:59
【问题描述】:
我使用 boost 和 QuantLib 来生成一个包含随机数(标准正态分布)的“数组”。但是,我注意到计算性能不是很理想,而且速度比简单地使用 python 的 numpy 慢得多。谁能给我一些建议? 非常感谢。
这是我的 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)
【问题讨论】:
-
您好堆栈溢出 (SO)。 SO 的我们很乐意为您提供帮助,但请遵守我们的规则,让我们更轻松。考虑通读Help 并使用Tour。尤其要考虑通读How do I ask a good question? 和How to create a Minimal, Complete, and Verifiable example。
-
您是否在启用优化的情况下编译了 C++ 代码?每个项目的结果如何?
-
@Caleth 在这种情况下,我们缺少有关编译器、发布/调试构建类型、优化标志、特定基准测试结果和硬件的关键信息。
-
在我对
C++代码稍作修改的测试中(使用std::不提升),它们的运行速度大致相同,C++稍快。 -
@Caleth 我不想刻薄之类的......我只想指出,如果没有支持的详细信息,我们无法找到答案