如何优化高斯pdf的计算?

时间:2011-11-13 09:27:03

标签: c++ c numerical

我正在开发一个C ++项目,通常需要在给定数据点x和现有高斯分布G的情况下计算高斯pdf。

由于涉及指数函数exp,因此这很昂贵。即使我记录日志,日志功能也很昂贵。关于我怎么做的任何建议?

2 个答案:

答案 0 :(得分:3)

对其进行矢量化,即使用SIMD并行计算指数或日志,如果不需要极高的精度,还可以使用优化的近似SSE explog,简单的lib为此可以找到here

然而,当涉及到优化时,首先进行配置,以这种方式解决问题,而不是您认为的问题。

答案 1 :(得分:0)

如果您使用以下快捷方式,则日志pdf并不昂贵:

开始
 log_pdf = log (1.0/ (sigma * 2.0 * pi))  - 0.5 * square(x-mean) / ( sigma*sigma );

您可以看到包含日志的术语部分可以针对任何特定PDF进行预先计算,其余部分也可以预先计算。因此,对于标准偏差和平均值的任何给定值:

log_k = log (1.0/ (sigma * 2.0 * pi));
half_over_sigma_sq= 0.5 / (sigma*sigma)

然后在评估许多不同的x值时,你可以只计算

log_pdf = log_k - half_over_sigma_sq * square(x-mean);

此技巧一直用于统计建模。