我正在计算自由能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 给出零除法错误:(我希望 ln 返回 -1)
在做完 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
这将替换数组中我无法接受的所有值。
如果您想避免错误,请提前预测它们:
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