gpt4 book ai didi

c - C 中的 logsumexp 实现?

转载 作者:太空狗 更新时间:2023-10-29 16:44:41 24 4
gpt4 key购买 nike

有人知道提供 logsumexp 函数的开源数值 C 库吗?

logsumexp(a) 函数计算数组 a 的分量的指数 log(e^{a_1}+...e^{a_n}) 之和,避免数值溢出。

最佳答案

这是一个非常简单的从头开始的实现(至少经过最低限度的测试):

double logsumexp(double nums[], size_t ct) {
double max_exp = nums[0], sum = 0.0;
size_t i;

for (i = 1 ; i < ct ; i++)
if (nums[i] > max_exp)
max_exp = nums[i];

for (i = 0; i < ct ; i++)
sum += exp(nums[i] - max_exp);

return log(sum) + max_exp;
}

这是有效地将所有参数除以最大参数的技巧,然后在末尾添加其对数以避免溢出,因此添加大量类似缩放的值时表现良好,但错误会逐渐增加如果某些参数比其他参数大很多个数量级。

如果你想让它在给定 0 个参数时运行而不会崩溃,你必须为此添加一个案例:)

关于c - C 中的 logsumexp 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com