在python中包含指数的对数和中的负数

时间:2014-08-30 08:43:43

标签: python numpy sum exp

我想在python 2.7中使用numpy的logsumexp()。 我需要解决的公式如下:

log ( 1 + e^a1 + e^a2 + e^a3 + ... e^an - e^ax )

必须附加最后一个为负数的术语。 不包括上一学期,我会做以下事情:

myarray = numpy.array([0, a1, a2, a3, ..., an])

这样,第一个元素是0,然后是e^0 = 1,所以我的第一个词是1。然后我会用

  result = numpy.logsumexp(myarray)

我会得到正确的结果。

但现在我必须追加-e^ax,因为它是否定的,我不能简单地将ax追加到myarray的末尾。我也无法追加-ax,因为这是错误的,这意味着我要添加1/e^ax,而不是-e^ax

有没有直接的方法来追加这个,以便我仍然可以使用logsumexp()?我坚持使用logsumexp()而不是单独使用numpy.exp()numpy.sum()以及numpy.log()的唯一原因是因为我的印象是logsumexp在其中加入稳定性以防止下溢(如果我错了,请纠正我)。然而,如果没有别的办法,我想我别无选择。

1 个答案:

答案 0 :(得分:2)

根据scipy.misc.logsumexp documentation

scipy.misc.logsumexp(a, axis=None, b=None)

Parameters:   
    b: array-like, optional
        Scaling factor for exp(a).
        Must be of the same shape as a or broadcastable to a.
    New in version 0.12.0.

所以,你可以添加这样的因素列表:

In [2]: a = [0, 1, 3, 2]

In [3]: logsumexp(a, b=[1] * (len(a) - 1) + [-1])
Out[3]: 2.7981810916785101