0

我有一个由高斯 PDF 生成 的非常小的指数值列表(例如exp(n),带有)。n<-300

我想计算它们中的每一个与总和成正比的程度,例如下面的类似 python 的伪代码:

s = 0  # sum of all values
for n in exponents:
    s += exp(n)

for n in exponents:
    k = exp(n)/s  # I want to compute k for each n

问题是,由于 的值n都非常小,总和s有时会为零,我会得到被零除的错误。

我知道我可以做的一件事是向 all 添加一个常量值(比如 300)n以防止下溢,但在其他情况下会导致上溢。

我该如何解决这个问题?

不知道有没有表达清楚,如有不妥或语法错误,请指正。提前致谢。

4

1 回答 1

1

正如您已经观察到的,您可以通过m从 all中减去一个常数值来做到这一点n

为避免溢出,不要选择固定的m,例如m = - 300. 相反,选择m成为所有 中的最大值n。那么每个归一化的指数值最多为1,因此归一化的和最多为指数的数量,这应该是相当小的。

于 2016-03-07T06:47:16.840 回答