Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,在指数的对数和中包含负数_Python_Numpy_Sum_Exp - Fatal编程技术网

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

在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

我想在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.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]