我想在单个函数中更改 numpy 的浮点错误处理。
典型例子:
import numpy as np
def f():
np.seterr(all='raise')
# Do some other stuff
print(np.seterr())
# {'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
f()
print(np.seterr())
# {'divide': 'raise', 'over': 'raise', 'under': 'raise', 'invalid': 'raise'}
我希望对 f
的调用不会改变 np.seterr()
的输出,我不知道该怎么做。
感谢您的帮助!
最佳答案
使用 numpy.errstate
临时更改浮点错误处理的上下文管理器:
def f():
with numpy.errstate(all='raise'):
...
请注意,虽然这是一个临时更改,但它仍然是跨线程和协程的全局更改。在撰写本文时,NumPy 不提供线程本地或 contextvars
的选项。基于错误设置。
从 NumPy 1.17 开始,还可以将 numpy.errstate
用作函数装饰器,其效果与将整个主体包裹在 with numpy.errstate(.. .):
block :
@numpy.errstate(all='raise')
def f():
...
关于python - 仅在函数内更改 np.seterr 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634965/