[Numpy-discussion] request for new array method: arr.abs()

Travis Oliphant oliphant.travis at ieee.org
Wed Aug 23 21:12:03 CDT 2006

Sebastian Haase wrote:
> On Wednesday 23 August 2006 18:37, Travis Oliphant wrote:
>> David M. Cooke wrote:
>>> On Wed, 23 Aug 2006 16:22:52 -0700
>>> Sebastian Haase <haase at msg.ucsf.edu> wrote:
>>>> On Wednesday 23 August 2006 16:12, Bill Baxter wrote:
>>>>> The thing that I find I keep forgetting is that abs() is a built-in,
>>>>> but other simple functions are not.  So it's abs(foo), but
>>>>> numpy.floor(foo) and numpy.ceil(foo).  And then there's round() which
>>>>> is a built-in but can't be used with arrays, so numpy.round_(foo).   
>>>>> Seems like it would be more consistent to just add a numpy.abs() and
>>>>> numpy.round().
>>>> Regarding the original subject:
>>>> a) "absolute" is impractically too much typing and
>>>> b) I just thought some (module-) functions might be "forgotten" to be
>>>> put in as (object-) methods ... !?
>>> Four-line change, so I added a.abs() (three lines for array, one
>>> for MaskedArray).
>> While I appreciate it's proactive nature, I don't like this change
>> because it adds another "ufunc" as a method.  Right now, I think conj is
>> the only other method like that.
>> Instead, I like better the idea of adding abs, round, max, and min to
>> the "non-import-*" namespace of numpy.
> How does this compare with
> mean, min, max, average
> ?

I'm not sure what this question is asking, so I'll answer what I think 
it is asking.

The mean, min, max, and average functions are *not* ufuncs.   They are 
methods of particular ufuncs. 

The abs() should not be slow (because it calls the __abs__ method which 
for arrays is mapped to the ufunc absolute).  Thus, there is one more 
layer of indirection which will only matter for small arrays.


More information about the Numpy-discussion mailing list