Files
2026-07-13 13:30:25 +08:00

12 lines
352 B
Matlab
Executable File

function s = logsumexp(X, dim)
% Compute log(sum(exp(X),dim)) while avoiding numerical underflow.
% By default dim = 1 (columns).
% Written by Mo Chen (sth4nth@gmail.com).
if nargin == 1
dim = find(size(X)~=1,1);
if isempty(dim), dim = 1; end
end
a = max(X,[],dim);
s = a+log(sum(exp(X-a),dim)); % TODO: use log1p
i = isinf(a);
s(i) = a(i);