Python SciPy genextreme.fit给出了:“一个;运行时警告:除以零“;

Python SciPy genextreme.fit给出了:“一个;运行时警告:除以零“;,python,scipy,statistics,Python,Scipy,Statistics,我正在尝试使用SciPy中的genextreme包进行GEV拟合。虽然我可以让它来估计参数,但我得到一个警告,它正在除以零 我尝试拟合不同的数据集,尝试为形状参数c设置不同的初始值,还尝试将数据乘以例如100。这些都不管用。我正在使用Python 2.7.12和SciPy 0.17.0 我是Python新手,希望对现有安装进行快速的第一次测试 代码中给出的数据大致为Gumbel分布(c=0),因为我在Gumbel图上检查了它,并使用线性回归进行了Gumbel拟合 import numpy as

我正在尝试使用SciPy中的genextreme包进行GEV拟合。虽然我可以让它来估计参数,但我得到一个警告,它正在除以零

我尝试拟合不同的数据集,尝试为形状参数c设置不同的初始值,还尝试将数据乘以例如100。这些都不管用。我正在使用Python 2.7.12和SciPy 0.17.0

我是Python新手,希望对现有安装进行快速的第一次测试

代码中给出的数据大致为Gumbel分布(c=0),因为我在Gumbel图上检查了它,并使用线性回归进行了Gumbel拟合

import numpy as np
from scipy.stats import genextreme as gev
t=np.array([3.8482, 3.6435, 3.0417, 4.0329, 3.2967, 3.3535, 3.6179, 3.3042, 3.6164, 3.5855, 2.7932, 2.8833, 2.6513, 2.7794, 3.2649, 3.2613, 3.1736, 3.1131, 3.3896, 4.2891])
a=gev.fit(t)
基于我的线性回归,我期望形状参数接近c=0,位置参数接近3.15,比例参数接近0.39。实际结果是:

/usr/lib/python2.7/dist-packages/scipy/stats/_continuous_distns.py:1776: RuntimeWarning: invalid value encountered in true_divide
np.sign(c)*(-g3+(g2+2*g2mg12)*g1)/((g2mg12)**(3./2.)))
/usr/lib/python2.7/dist-packages/scipy/stats/_continuous_distns.py:1781: RuntimeWarning: invalid value encountered in true_divide
(g4+(-4*g3+3*(g2+g2mg12)*g1)*g1)/((g2mg12)**2))
但是,显然为a指定了一个值,因为:

>>> a
(0.16458924337692377, 3.1800328240261857, 0.37894174199431357)

这些值接近我的预期,但我不理解警告

问题在于,您的代码在某些计算中试图除以0或NaN。
您可以通过潜入单独的计算并处理零和N来解决此问题,以便算法跳过它们,或者您可以执行以下操作:

import numpy as np
from scipy.stats import genextreme as gev
with np.errstate(divide='ignore', invalid='ignore'):
    t=np.array([3.8482, 3.6435, 3.0417, 4.0329, 3.2967, 3.3535, 3.6179, 3.3042, 3.6164, 3.5855, 2.7932, 2.8833, 2.6513, 2.7794, 3.2649, 3.2613, 3.1736, 3.1131, 3.3896, 4.2891])
    a=gev.fit(t)
这只是通过告诉算法忽略将被0或NaN除以的值作为异常处理的一种形式来抑制警告。
注意:
divide
对于0的除法,
对于在numpy数学运算中遇到NaN无效。
有关更多信息: