我有兴趣计算数量log(| sum_i [(x_i)^ 3] |);直接使用np.log(abs((x**3).sum()))
(其中x是元素数组,而x ** 3是将立方体函数元素明智地应用于该数组)的问题是,x**3
中的某些值可能会很大,并且有潜在的数值问题。
我的计划是使用logsumexp
技巧。但是,总和以外的绝对值很难消除。有帮助吗?
答案 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)))