logsumexp {mclust}R Documentation

Log sum of exponentials

Description

Efficient implementation (via Fortran) of the log-sum-exp function.

Usage

logsumexp(x, v = NULL)

Arguments

x

a matrix of dimension n×kn \times k of numerical values. If a vector is provided, it is converted to a single-row matrix.

v

an optional vector of length kk of numerical values to be added to each row of x matrix. If not provided, a vector of zeros is used.

Details

Given the matrix x, for each row x[i]=[x1,,xk]x_{[i]} = [x_1, \dots, x_k] (with i=1,,ni=1,\dots,n), the log-sum-exp (LSE) function calculates

LSE(x[i])=logj=1kexp(xj+vj)=m+logj=1kexp(xj+vjm) \text{LSE}(x_{[i]}) = \log \sum_{j=1}^k \exp(x_j + v_j) = m + \log \sum_{j=1}^k \exp(x_j + v_j - m)

where m=max(x1+v1,,xk+vk)m = \max(x_1+v_1, \dots, x_k+v_k).

Value

Returns a vector of values of length equal to the number of rows of x.

Author(s)

Luca Scrucca

References

Blanchard P., Higham D. J., Higham N. J. (2021). Accurately computing the log-sum-exp and softmax functions. IMA Journal of Numerical Analysis, 41/4:2311–2330. doi:10.1093/imanum/draa038

See Also

softmax

Examples

x = matrix(rnorm(15), 5, 3)
v = log(c(0.5, 0.3, 0.2))
logsumexp(x, v)

[Package mclust version 6.1.1 Index]