python - 在Python中,指数对数和中包含负数

标签 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 还包含稳定性以防止下溢(如果我错了,请纠正我)。但是,如果没有其他办法,那么我想我别无选择。

最佳答案

根据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

关于python - 在Python中,指数对数和中包含负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25580629/

相关文章:

mysql - 在一行中加入列

python - 如何使 Nose 测试使用python3

python - 转换为 Twisted 异步设计

python - sqlalchemy + flask : class is not defined

python - 对 Numpy 数组进行条件检查的有效方法

python - sum() 不适用于 Timedelta 对象列表

python - 在python中分隔克拉A

python - 我有一个 numpy 数组和一个索引数组,如何同时访问这些位置

python - numpy通过任意轴 reshape 多维数组

sql - 具有空值的外部连接表的累积和