Python:如何在函数定义中避免numpy运行时警告?

Python:如何在函数定义中避免numpy运行时警告?,python,numpy,Python,Numpy,我设计了一个简单的函数来返回一个数学函数,可以用来拟合实验数据。这些函数看起来非常类似于以下内容: def colecole_2(f,*p): term1=p[0] * ( 1 - 1 / (1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[1], p[2]))) term2=p[3] * ( 1 - 1 / (1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[4], p[5]))) re

我设计了一个简单的函数来返回一个数学函数,可以用来拟合实验数据。这些函数看起来非常类似于以下内容:

def colecole_2(f,*p):
    term1=p[0] * ( 1 - 1 / (1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[1], p[2])))
    term2=p[3] * ( 1 - 1 / (1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[4], p[5])))
    return p[6]*(1-abs( term1+ term2))
不幸的是,我遇到运行时警告问题,如下所示:

RuntimeWarning: overflow encountered in power
RuntimeWarning: overflow encountered in divide

由于值太大或太小。不过,我自己无法解决这个问题。有没有办法重新定义我的函数,使其在没有警告的情况下通过?

使用
numpy.seterr
控制numpy在这种情况下的操作:

使用“警告”模块控制警告的显示方式:

您可以使用内置的上下文管理器。这将允许您将错误处理设置为在with语句的上下文中

import numpy
# warning is not logged here. Perfect for clean unit test output
with numpy.errstate(divide='ignore'):
    numpy.float64(1.0) / 0.0

我最近在为一些旧式python代码编写单元测试时不得不这样做。

为了解决这个问题,可以通过修改调用函数的数组元素的类型来提高精度

例如,如果将作为元素的大数数组与大浮点数相乘会引发异常

RuntimeWarning: overflow encountered in multiply
然后在指定以下内容后

a = np.array(a, dtype=np.float128)

没有出现任何警告。

您知道如何捕获异常吗?@StevenRumbalski,这些异常没有引发。@MikeGraham:我的错。我误解了您的问题,没有注意到它们是警告。要忽略,请参见warnings.html reference.import warnings def fxn():warnings.warnings(“已弃用”,弃用警告)和warnings.catch_warnings():warnings.simplefilter(“忽略”)fxn()