Skip to content

Instantly share code, notes, and snippets.

@HanatoK
Created May 27, 2020 03:19
Show Gist options
  • Save HanatoK/92217fbaa2993e4731f6a3230ac80043 to your computer and use it in GitHub Desktop.
Save HanatoK/92217fbaa2993e4731f6a3230ac80043 to your computer and use it in GitHub Desktop.
LogSumExp
double LogSumExp(const vector<double>& exponent) {
double max_exponent = *std::max_element(std::begin(exponent), std::end(exponent));
double sum = std::accumulate(std::begin(exponent), std::end(exponent), double(0.0), [max_exponent](double init, double x){return init + std::exp(x - max_exponent);});
double result = max_exponent + std::log(sum);
return result;
}
double LogSumExp(vector<double> exponent, const vector<double>& alpha) {
std::transform(std::begin(exponent), std::end(exponent), std::begin(alpha), std::begin(exponent), [](double x, double a){return x + std::log(a);});
return LogSumExp(exponent);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment