python - 避免在 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])
解决方案
您可以通过以下方式删除该消息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
推荐阅读
- ios - 我收到错误消息:-[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] 中的断言失败
- javascript - 如何创建一个滑动侧导航栏,在打开时使网站的其余部分变暗?
- python - 从Python中json的字符串值中删除不需要的子字符串
- javascript - Angularjs获取当前时间
- javascript - 如何修复这个“if”语句
- python - 如何从 CatboostClassifier 中的“experiment.cbsnapshot”文件中恢复模型?
- linux - 在 macOS 上关闭 Stanford CoreNLP 服务器的优雅方式?
- python - 如何使用熊猫解析 jsonlines 文件
- layout - Salesforce 组件问题
- r - 使用“数据”参数编写长函数