C++快速对数正态CDF近似 在C++中,我想创建一个函数,它以一个数字向量作为输入,输出一个CDF值向量。以下是我的尝试: #include <boost/math/distributions/lognormal.hpp> vector<double> lognormCDF(vector<double>& input, double sigma) { vector<double> output(input.size()); boost::math::lognormal lognormDistr(0, sigma); for (size_t i = 0; i != input.size(); ++i) { output[i] = boost::math::cdf(lognormDistr, input[i]); } return output; }

C++快速对数正态CDF近似 在C++中,我想创建一个函数,它以一个数字向量作为输入,输出一个CDF值向量。以下是我的尝试: #include <boost/math/distributions/lognormal.hpp> vector<double> lognormCDF(vector<double>& input, double sigma) { vector<double> output(input.size()); boost::math::lognormal lognormDistr(0, sigma); for (size_t i = 0; i != input.size(); ++i) { output[i] = boost::math::cdf(lognormDistr, input[i]); } return output; },c++,cdf,C++,Cdf,上面的代码工作,但我需要它更快 以下是有关如何使用该函数的一些背景信息: 输入向量未排序且始终为正。 输入向量的长度通常为250到500个元素。 西格玛值可以在0.14到1.4之间 CDF输出将在0.000001到0.999999之间 CDF输出只需精确到最接近的0.000001 我只是想知道是否有更快的方法来实现上述功能 我还想知道如果我对输入向量进行排序,有没有更快的方法来计算对数正态CDF输出向量?正态CDF通常使用样条多项式近似。在这种情况下,您可以使用类似的技术。您应该检查boost:

上面的代码工作,但我需要它更快

以下是有关如何使用该函数的一些背景信息:

输入向量未排序且始终为正。 输入向量的长度通常为250到500个元素。 西格玛值可以在0.14到1.4之间 CDF输出将在0.000001到0.999999之间 CDF输出只需精确到最接近的0.000001 我只是想知道是否有更快的方法来实现上述功能


我还想知道如果我对输入向量进行排序,有没有更快的方法来计算对数正态CDF输出向量?

正态CDF通常使用样条多项式近似。在这种情况下,您可以使用类似的技术。您应该检查boost::math::cdf是如何实现的。如果你想让它更快,你可以使用更少的样条多项式。为什么不使用多线程实现呢?看起来很容易做到,实际上你可以自由锁定你可以尝试使用浮动。