如何避免立方和绝对值的对数中的数值溢出?

时间:2019-06-04 21:32:59

标签: python numpy numerical-methods

我有兴趣计算数量log(| sum_i [(x_i)^ 3] |);直接使用np.log(abs((x**3).sum()))(其中x是元素数组,而x ** 3是将立方体函数元素明智地应用于该数组)的问题是,x**3中的某些值可能会很大,并且有潜在的数值问题。

我的计划是使用logsumexp技巧。但是,总和以外的绝对值很难消除。有帮助吗?

1 个答案:

答案 0 :(得分:1)

我们可以使用一些数学运算来避免数值溢出。

假设x是一个numpy数组。

问题来自abs((x**3).sum()),特别是求查操作。通过将x中的每个数字缩小一个常数,可以使计算更加稳定。因为我们要在求立方之前在数组 中除以常量,所以我们需要将求和乘以常量立方体 outside

换句话说:

abs((x**3).sum()) = (constant**3)*abs(((x/constant)**3).sum())

使用日志的属性,您可以将最终表达式简化为以下内容:

np.log(constant**3) + np.log(abs(((x/constant)**3).sum(0)))