我正在计算自由能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)
答案 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