如何修复numpy日志信息值和RuntimeWarning

时间:2019-01-17 11:44:30

标签: python-3.x numpy

我正在计算自由能G = -RT ln(1-Y / Y)

Y是一个numpy ndarray

问题是当Y的元素= 1或0时。

try:
    log_value = np.log((1-Y)/Y)
except ZeroDivisionError as e:
    log_value = -1
except RuntimeWarning:
    log_value = 1

Z = -0.0083145*X*log_value

如果Y = 1 ln会给出运行时错误,其值为-inf(我希望ln返回1)

如果Y = 0 ln则提供ZeroDivisionError :(我希望ln返回-1)

2 个答案:

答案 0 :(得分:0)

完成np.log之后,我仅添加了

temp_log = np.log((1-Y)/Y)
temp_log[temp_log==-np.inf] = 1
temp_log[temp_log==-0] = -1
Z = -0.0083145*X*temp_log

这将替换数组中我不可接受的所有值。

答案 1 :(得分:0)

如果要避免这些错误,请提前进行预测:

if Y == 1:
    log_value = 1
elif Y == 0:
    log_value = -1
else:
    log_value = np.log((1-Y)/Y)


Z = -0.0083145*X*log_val