【问题标题】:Avoidance receives warning message in Log10 operation [duplicate]避免在 Log10 操作中收到警告消息 [重复]
【发布时间】:2020-11-16 10:30:07
【问题描述】:

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

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])

【问题讨论】:

标签: python numpy


【解决方案1】:

你可以用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的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多