python - 仅在函数内更改 np.seterr 行为

标签 python numpy

我想在单个函数中更改 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/

相关文章:

python - 两个二维数组的 np.dot

python - Redis模式: how would you cache free/occupied ressource with expiration?

python - 使用 python 计算列中单词出现的次数

python - 在 numpy 中正确执行以下操作的正确方法

python - 拆分非常大的 Pandas 数据框,替代 Numpy array_split

python - 翻转和旋转 numpy 数组

python - 使用现有的 virtualenv 配置 PyCharm

Python多线程: manager dict not serializable

python - turtle 模块没有属性颜色?

python - 在 NumPy 中最优雅地实现 MATLAB 的 "vec"函数