logsumexp#
- scipy.special.logsumexp(a, axis=None, b=None, keepdims=False, return_sign=False)[source]#
計算輸入元素的指數和的對數。
- 參數:
- aarray_like
輸入陣列。
- axisNone 或 int 或 int 元組,選用
要計算總和的軸或軸。預設情況下,axis 為 None,並對所有元素求和。
在 0.11.0 版本中加入。
- barray-like,選用
exp(a) 的縮放因子,必須與 a 的形狀相同,或可廣播到 a。 這些值可能為負數,以實現減法。
在 0.12.0 版本中加入。
- keepdimsbool,選用
如果設定為 True,則縮減的軸將保留在結果中,作為大小為一的維度。 使用此選項,結果將針對原始陣列正確廣播。
在 0.15.0 版本中加入。
- return_signbool,選用
如果設定為 True,則結果將會是一對包含符號資訊;如果為 False,則負數結果將以 NaN 傳回。 預設值為 False(無符號資訊)。
在 0.16.0 版本中加入。
- 傳回值:
- resndarray
結果,
np.log(np.sum(np.exp(a)))
以數值上更穩定的方式計算。 如果給定 b,則傳回np.log(np.sum(b*np.exp(a)))
。 如果return_sign
為 True,則res
包含參數絕對值的對數。- sgnndarray
如果
return_sign
為 True,則這將是一個浮點數陣列,與 res 相符,包含 +1、0、-1(對於實數值輸入)或複數相位(對於複數輸入)。 這給出了res
中對數參數的符號。 如果return_sign
為 False,則僅傳回一個結果。
註解
NumPy 有一個 logaddexp 函數,它與
logsumexp
非常相似,但僅處理兩個參數。logaddexp.reduce 與此函數類似,但可能較不穩定。對數是一個多值函數:對於每個 \(x\),都有無數個 \(z\) 使得 \(exp(z) = x\)。 慣例是傳回虛部位於 \((-pi, pi]\) 中的 \(z\)。
範例
>>> import numpy as np >>> from scipy.special import logsumexp >>> a = np.arange(10) >>> logsumexp(a) 9.4586297444267107 >>> np.log(np.sum(np.exp(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