首页 > 解决方案 > 避免在 Log10 操作中收到警告消息

问题描述

执行以下代码时如何避免收到警告消息?

from numpy import inf
a = np.array([0.2,0.2,0.3])
b = np.array([0.3,0.0,0.1])
a = np.log10(a)
b = np.log10(b)
b[b == -inf] = 0
a[a == -inf] = 0

calc = a+b

收到的警告信息:

divide by zero encountered in log10

该代码应产生以下结果:

array([-1.22184875, -0.69897   , -1.52287875])

标签: pythonnumpy

解决方案


您可以通过以下方式删除该消息np.seterr

from numpy import inf
a = np.array([0.2,0.2,0.3])
b = np.array([0.3,0.0,0.1])
with np.seterr(divide = 'ignore'):
    a = np.log10(a)
    b = np.log10(b)
b[b == -inf] = 0
a[a == -inf] = 0
    
calc = a+b

如果您不想计算log(0),则需要像在欺骗目标中一样解决它:

calc = np.zeros_like(a)
a_ = a.astype(bool)   #False when 0
b_ = b.astype(bool)
np.add.at(calc, np.nonzero(a_), np.log10(a[a_]))
np.add.at(calc, np.nonzero(b_), np.log10(b[b_]))

这两个都只能摆脱错误,a, b == 0而不是错误a, b < 0


推荐阅读