我的尝试:
import numpy as np
np.seterr(divide='ignore')
a=np.array([4/3,0,0])
b=np.array([1,0,0])
np.divide(a,b)
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
__main__:1: RuntimeWarning: invalid value encountered in true_divide
array(1.33333333, nan, nan])
Run Code Online (Sandbox Code Playgroud)
如果我再问:
np.divide(a,b)
Run Code Online (Sandbox Code Playgroud)
然后不显示 RuntimeWarning。
我对输出的数组很满意,但我不想要错误消息;这就是我认为 seterr 会解决的问题。我怎样才能摆脱警告?(我宁愿不写一个为 0/0 设置例外的 for 循环。)
尝试:
np.seterr(invalid='ignore')
Run Code Online (Sandbox Code Playgroud)
或者
np.seterr(all='ignore')
Run Code Online (Sandbox Code Playgroud)
从seterr文档:
Run Code Online (Sandbox Code Playgroud)- Invalid operation: result is not an expressible number, typically indicates that a NaN was produced.
1/0产生FloatingPointError: divide by zero encountered in true_divide错误/警告。
0/0产生Warning: invalid value encountered in true_divide错误/警告。
all 会抓住两个。
errstate可以用来临时改变np.seterr。
In [1472]: with np.errstate(invalid='print'):
y=np.divide([1.2,0,0],[1,0,0])
......:
Warning: invalid value encountered in true_divide
Run Code Online (Sandbox Code Playgroud)
warnings 一般都是在运行中第一次出现问题时发出,然后是无声的。
| 归档时间: |
|
| 查看次数: |
2244 次 |
| 最近记录: |