在python中,在指数的对数和中包含负数
我想在python 2.7中使用numpy的在python中,在指数的对数和中包含负数,python,numpy,sum,exp,Python,Numpy,Sum,Exp,我想在python 2.7中使用numpy的logsumexp()。 我需要求解的公式如下所示: log ( 1 + e^a1 + e^a2 + e^a3 + ... e^an - e^ax ) In [2]: a = [0, 1, 3, 2] In [3]: logsumexp(a, b=[1] * (len(a) - 1) + [-1]) Out[3]: 2.7981810916785101 最后一项是负数,只需加上。 除上一学期外,我将做以下工作: myarray = numpy.a
logsumexp()
。
我需要求解的公式如下所示:
log ( 1 + e^a1 + e^a2 + e^a3 + ... e^an - e^ax )
In [2]: a = [0, 1, 3, 2]
In [3]: logsumexp(a, b=[1] * (len(a) - 1) + [-1])
Out[3]: 2.7981810916785101
最后一项是负数,只需加上。
除上一学期外,我将做以下工作:
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
:
因此,您可以添加如下因素列表:
log ( 1 + e^a1 + e^a2 + e^a3 + ... e^an - e^ax )
In [2]: a = [0, 1, 3, 2]
In [3]: logsumexp(a, b=[1] * (len(a) - 1) + [-1])
Out[3]: 2.7981810916785101
您是否可以使用scipy 0.12中的
scipy.misc.logsumexp
?是的,我可以使用scipy,我有0.13谢谢-但我不知道如何在我的案例中使用它?我需要从列表中减去e^ax。我试着用计算器来理解你写的东西,但得到了不同的答案,或者我猜我的python不够好,无法理解。嗯。。。第23行应该可以。请你添加一个例子,产生意想不到的结果好的,例子:我需要取e^0+e^1+e^3-e^2之和的日志。因此,总和约为16.41476
。那么这个日志是关于2.79818…
。因此最终结果应该是2.79818
。(不完全四舍五入)。我用你的例子更新了帖子,它能解决问题吗?谢谢!是的,这很有效。你能解释一下吗?我知道b
等于a
的最后一个元素1*但为什么+[-1]
?