[Numpy-discussion] Adding .abs() method to the array object

Sebastian Berg sebastian at sipsolutions.net
Mon Feb 25 21:20:17 EST 2013


On Mon, 2013-02-25 at 10:50 -0500, Skipper Seabold wrote:
> On Mon, Feb 25, 2013 at 10:43 AM, Till Stensitzki <mail.till at gmx.de>
> wrote:
> >
> > First, sorry that i didnt search for an old thread, but because i
> disagree with
> > conclusion i would at least address my reason:
> >
> >> I don't like
> >> np.abs(arr).max()
> >> because I have to concentrate to much on the braces, especially if
> arr
> >> is a calculation
> >
> > This exactly, adding an abs into an old expression is always a
> little annoyance
> > due to the parenthesis. The argument that np.abs() also works is
> true for
> > (almost?) every other method. The fact that so many methods already
> exists,
> > especially for most of the commonly used functions (min, max, dot,
> mean, std,
> > argmin, argmax, conj, T) makes me missing abs. Of course, if one
> would redesign
> > the api, one would drop most methods (i am looking at you ptp and
> byteswap). But
> > the objected is already cluttered and adding abs is imo logical
> application of
> > "practicality beats purity".
> >
> 
> I tend to agree here. The situation isn't all that dire for the number
> of methods in an array. No scrolling at reasonably small terminal
> sizes.
> 
> [~/]
> [3]: x.
> x.T             x.copy          x.getfield      x.put           x.std
> x.all           x.ctypes        x.imag          x.ravel
> x.strides
> x.any           x.cumprod       x.item          x.real          x.sum
> x.argmax        x.cumsum        x.itemset       x.repeat
>  x.swapaxes
> x.argmin        x.data          x.itemsize      x.reshape       x.take
> x.argsort       x.diagonal      x.max           x.resize
>  x.tofile
> x.astype        x.dot           x.mean          x.round
> x.tolist
> x.base          x.dtype         x.min           x.searchsorted
>  x.tostring
> x.byteswap      x.dump          x.nbytes        x.setfield
>  x.trace
> x.choose        x.dumps         x.ndim          x.setflags
>  x.transpose
> x.clip          x.fill          x.newbyteorder  x.shape         x.var
> x.compress      x.flags         x.nonzero       x.size          x.view
> x.conj          x.flat          x.prod          x.sort          
> x.conjugate     x.flatten       x.ptp           x.squeeze       
> 
> 
Two small things (not sure if it matters much). But first almost all of
these methods are related to the container and not the elements. Second
actually using a method arr.abs() has a tiny pitfall, since abs would
work on numpy types, but not on python types. This means that:

np.array([1, 2, 3]).max().abs()

works, but

np.array([1, 2, 3], dtype=object).max().abs()

breaks. Python has a safe name for abs already...


> I find myself typing things like 
> 
> arr.abs()
> 
> and
> 
> arr.unique()
> 
> quite often.
> 
> Skipper
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion





More information about the NumPy-Discussion mailing list