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