[Numpy-discussion] clip() with None as argument

Chris Ball ceball@gmail....
Thu Sep 9 05:05:09 CDT 2010


Robert Kern <robert.kern <at> gmail.com> writes:
> 
> On Wed, Sep 8, 2010 at 14:42, Chris Ball <ceball <at> gmail.com> wrote:
> > Robert Kern <robert.kern <at> gmail.com> writes:
> >
...
> >>>> a = numpy.array([1,2,3,4,5])
> >>>> a.clip(2,None)
> > array([2, 2, 2, 2, 2], dtype=object)
> >
> > I'm not sure why the returned array has a dtype of object
> 
> The usual type-matching semantics. a.clip() tries to find a common
> type that fits `a`, 2 and None. Since None only fits in an object
> dtype, that's what you get.
...
> > and also why the values are not like this:
> >>>> numpy.maximum(a,2)
> > array([2, 2, 3, 4, 5])
> 
> clip(a, low, high) boils down to this in the C code itself (or at
> least the code path that it goes down when the input array needs to be
> upcast):
> 
>   maximum(minimum(a, high), low)
> 
> Since all integer objects compare > None based on the default Python
> 2.x implementation of comparison across types, you would just get the
> low value out of that.

Thanks for explaining that. It all makes sense if clip() requires both bounds to 
be passed, which is what the documentation indicates, so there is not really a 
problem. I was just confused because of the post and associated commit from 
Travis a while back implying that he'd altered clip() to support only one bound 
("Allow clip method to have either min or max passed in", 4566).

Chris






More information about the NumPy-Discussion mailing list