scipy.special.logsumexp

scipy.special.logsumexp(a, axis=None, b=None, keepdims=False, return_sign=False)[源代码]

计算输入元素的指数和的对数。

参数
aarray_like

输入数组。

axis无整型或整型或元组整型,可选

求和所经过的一个或多个轴。默认情况下, axis 为NONE,则对所有元素求和。

0.11.0 新版功能.

keepdims布尔值,可选

如果设置为True,则减少的轴将作为尺寸为1的尺寸保留在结果中。使用此选项,结果将根据原始阵列正确广播。

0.15.0 新版功能.

b类似阵列,可选

EXP的比例因子 (a )的形状必须与 a 或可广播到 a 。为了实现减法,这些值可以是负值。

0.12.0 新版功能.

return_sign布尔值,可选

如果设置为True,则结果将是包含符号信息的对;如果设置为False,则负结果将返回为NaN。默认值为FALSE(无标志信息)。

0.16.0 新版功能.

退货
resndarray

结果呢, np.log(np.sum(np.exp(a))) 以更稳定的数值方式计算。如果 b 然后给出的是 np.log(np.sum(b*np.exp(a))) 返回。

sgnndarray

如果return_sign为True,则这将是匹配res和+1、0或-1的浮点数数组,具体取决于结果的符号。如果为False,则只返回一个结果。

注意事项

NumPy有一个logaddexp函数,它非常类似于 logsumexp ,但只处理两个参数。 logaddexp.reduce 与此函数相似,但可能不太稳定。

示例

>>> from scipy.special import logsumexp
>>> a = np.arange(10)
>>> np.log(np.sum(np.exp(a)))
9.4586297444267107
>>> logsumexp(a)
9.4586297444267107

有权重的

>>> a = np.arange(10)
>>> b = np.arange(10, 0, -1)
>>> logsumexp(a, b=b)
9.9170178533034665
>>> np.log(np.sum(b*np.exp(a)))
9.9170178533034647

返回标志标志

>>> logsumexp([1,2],b=[1,-1],return_sign=True)
(1.5413248546129181, -1.0)

请注意, logsumexp 不直接支持掩码数组。若要在遮罩数组上使用它,请将遮罩转换为零权重:

>>> a = np.ma.array([np.log(2), 2, np.log(3)],
...                  mask=[False, True, False])
>>> b = (~a.mask).astype(int)
>>> logsumexp(a.data, b=b), np.log(5)
1.6094379124341005, 1.6094379124341005