11
是否有人知道提供了logsumexp
功能的開源數字C庫?logsumexp在C中的實現?
logsumexp(a)
函數計算數組a的組成部分的指數log(e^{a_1} + ... e^{a_n})的和,從而避免數值溢出。
是否有人知道提供了logsumexp
功能的開源數字C庫?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參數時崩潰運行,你就必須添加的情況下爲:)
你感到羞恥,霍布斯。你應該知道使用'int'來完成'size_t'的工作。 – 2010-11-13 01:20:32
有罪。 C對我來說更像是一種愛好。我會解決它。 – hobbs 2010-11-13 02:27:24