[SciPy-Dev] Warnings raised (from fit in scipy.stats)

Skipper Seabold jsseabold at gmail.com
Fri Jul 2 13:50:46 EDT 2010


On Fri, Jun 11, 2010 at 12:34 PM, Skipper Seabold <jsseabold at gmail.com> wrote:
> On Fri, Jun 11, 2010 at 1:07 PM,  <josef.pktd at gmail.com> wrote:
>> On Fri, Jun 11, 2010 at 12:45 PM, Skipper Seabold <jsseabold at gmail.com> wrote:
>>> Since the raising of warning behavior has been changed (I believe), I
>>> have been running into a lot of warnings in my code when say I do
>>> something like
>>>
>>> In [120]: from scipy import stats
>>>
>>> In [121]: y = [-45, -3, 1, 0, 1, 3]
>>>
>>> In [122]: v = stats.norm.pdf(y)/stats.norm.cdf(y)
>>> Warning: invalid value encountered in divide
>>>
>>> Sometimes, this is useful to know.  Sometimes, though, it's very
>>> disturbing when it's encountered in some kind of iteration or
>>> optimization.  I have been using numpy.clip to get around this in my
>>> own code, but when it's buried a bit deeper, it's not quite so simple.
>>>
>>> Take this example.
>>>
>>> In [123]: import numpy as np
>>>
>>> In [124]: np.random.seed(12345)
>>>
>>> In [125]: B = 6.0
>>>
>>> In [126]: x = np.random.exponential(scale=B, size=5000)
>>>
>>> In [127]: from scipy.stats import expon
>>>
>>> In [128]: expon.fit(x)
>>>
>>> <dozens of warnings clipped>
>>>
>>> Out[128]: (0.21874043533906118, 5.7122829778172939)
>>>
>>> The fit is achieved by fmin (as far as I know, since disp=0 in the
>>> rv_continuous.fit...), but there are a number of warnings emitted.  Is
>>> there any middle ground to be had in these type of situations via
>>> context management perhaps?
>>>
>>> Should I file a ticket?
>>
>> Which numpy scipy versions are you using?
>>
>
> Numpy
>
> '2.0.0.dev8417'
>
> Scipy
>
> '0.9.0.dev6447'
>
>> I don't get any warning with the first example. (numpy 1.4.0)
>> (I cannot run the second example because I have a scipy revision with
>> a broken fit() method)
>>
>> I don't think wrapping functions/methods to turn off warnings is a
>> good option. (many of them are in inner loops for example for random
>> number generation)
>>
>
> Granted I haven't looked too much into the details of the warnings
> context manager other than using some toy examples once or twice, but
> if you could just suppress them for when the solver is called within a
> function/method then this would do the trick (at least for the ones I
> have been running into, mostly to do with fitting like this or with
> maximum likelihood).
>
> Skipper
>

Replying to myself here.  For noiseless tests (ie., no floating point
warnings) just do

import numpy as np
np.seterr(all='ignore')

Skipper



More information about the SciPy-Dev mailing list